如何為新的外接程式使用者配置 Python Init 路徑和 sys 路徑語句?大家好,
我正在使用 Application Builder 開發一個帶有 Python 整合的應用程式。 我計劃將其編譯為加載項以便能夠與其他用戶共享,但是,我需要一種方法來為所有用戶正確設定 Python 初始化。
我運行應用程式的方式僅適用於我(用戶 EstelleS1 和我的環境, JMPPython環境) :
appNS:PythonPathText = "C:\Users\EstelleS1\AppData\Local\Programs\Python\Python37\JMPPythonEnvironment\Scripts\python37.dll";
appNS:PythonSysPathText = {"",
"C:\\Users\\EstelleS1\\AppData\\Local\\Programs\\Python\\Python37\\JMPPythonEnvironment\\Scripts\\python37.zip",
"C:\\Users\\EstelleS1\\AppData\\Local\\Programs\\Python\\Python37\\DLLs",
"C:\\Users\\EstelleS1\\AppData\\Local\\Programs\\Python\\Python37\\lib",
"C:\\Users\\EstelleS1\\AppData\\Local\\Programs\\Python\\Python37",
"C:\\Users\\EstelleS1\\AppData\\Local\\Programs\\Python\\Python37\\JMPPythonEnvironment",
"C:\\Users\\EstelleS1\\AppData\\Local\\Programs\\Python\\Python37\\JMPPythonEnvironment\\lib\\site-packages"};
Python Init(
Path( PythonPathText ),
Python Sys Path( PythonSysPathText )
);(appNS 指的是我的應用程式命名空間)
其他用戶將擁有很多管理權限,因此我正在考慮設定一個工作流程,其中新用戶將單擊應用程式啟動器中的按鈕來上傳帶有Python 路徑和系統路徑字串的文本文件,然後應用程式將採用這些文件檔案並將副本保存在新資料夾中(其中 $DESKTOP 應是所有使用者電腦上可存取的位置)。
PythonPathButtonPress=Function({this},
// This function is called when the button is pressed
name = this << Get Button Name;
pickPythonPathFile = Pick File("Please select Python Path text file");
pickPythonSysPathFile = Pick File("Please select Python Sys Path text file");
PythonPathFile = Load Text File( pickPythonPathFile );
PythonSysPathFile = Load Text File( pickPythonSysPathFile );
PythonConfigFolder = ( "$DESKTOP/JMPPython Config/" );
NEWPythonPathFile = (PythonConfigFolder || "PythonPath.txt" );
NEWPythonSysPathFile = (PythonConfigFolder || "PythonSysPath.txt" );
PythonConfigDir = Create Directory( PythonConfigFolder );
Save Text File( NEWPythonPathFile, PythonPathFile );
Save Text File( NEWPythonSysPathFile, PythonSysPathFile );
);因此,第一次完成此操作後,使用者無需再單擊按鈕來配置 Python。 然後,在運行加載項的 Python 整合部分時,應用程式將自動搜尋並在可存取的資料夾位置(無論是 $DESKTOP 還是其他更好的位置)中開啟這些複製的檔案:
PythonPathFile = Convert File Path( "$DESKTOP\JMPPython Config\PythonPath.txt", search );
PythonSysPathFile = Convert File Path( "$DESKTOP\JMPPython Config\PythonSysPath.txt", search );
Try( appNS:PythonPathText = Load Text File( PythonPathFile ), New Window("Python Initialization Error", << Modal, Text Box("Need to configure Python first!") ); Throw() );
Try( appNS:PythonSysPathText = Load Text File( PythonSysPathFile ), New Window("Python Initialization Error", << Modal, Text Box("Need to configure Python first!") ); Throw() );
Python Init(
Path( PythonPathText ),
Python Sys Path( PythonSysPathText )
);但這並沒有發揮作用。 我收到錯誤「找不到指定的模組。在存取或評估 'Python Init' 、Python Init/*###*/(Path( PythonPathText )、Python Sys Path( PythonSysPathText )) 時」。 我不確定到底是什麼導致了這個錯誤或如何修復它。
如果有人能為這個問題提供見解或更好的解決方案,我將不勝感激。
資料存取分享和交流成果回覆:如何為新加載項使用者配置 Python Init 路徑和 sys 路徑語句?不,不幸的是。 Term() 只嘗試恢復一些全域變數並嘗試清理環境,就像它是全新的一樣。 技術問題是卸載Python共享庫以及它可能加載的所有共享庫是不可行的。 因此,如果 Python 初始化不當,或者您想要初始化不同版本的 Python,則需要重新啟動 JMP。
回覆:如何為新的加載項使用者配置 Python Init 路徑和 sys 路徑語句?事實上,我想出了另一種方法來做到這一點:
PythonSysPathFile = Convert File Path( "$DESKTOP\JMPPython Config\PythonSysPath.txt", search );
PythonSysPathText = Load Text File( PythonSysPathFile );
PythonSysPathList = {""};
NListItems = NItems(Eval List(Words(PythonSysPathText, "\!N"))) + 1;
For( i = 1, i < NListItems, i++,
string = Word(i, PythonSysPathText, "\!N");
Insert Into(PythonSysPathList, string)
);
Python Init(
Path( PythonPathText ),
Python Sys Path( PythonSysPathList )
);
version = Python Get Version();
Show( version );
並且 sys 路徑列表正確填充並且 Python 啟動...但現在它看不到我的虛擬環境!...
-------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ------
編輯:我相信 Python Term() 並不像我想像的那樣運作。 似乎如果我第一次運行腳本時正確啟動 python,然後弄亂初始化程式碼,它將根據第一次正確的初始化繼續正常運行,反之亦然。 我需要完全關閉 JMP 並重新打開才能真正看到此初始化程式碼正在運行,它只是停留在使用我在對此處發布的問題進行故障排除時所做的第一個錯誤的初始化嘗試上。
Python Term() 實際上沒有關閉初始化的 Python 環境嗎?
回覆:如何為新的加載項使用者配置 Python Init 路徑和 sys 路徑語句?謝謝回覆! 我確實有這樣的問題... 我想我只需在文字檔案中包含 dll 的檔案目錄路徑(不帶引號(並且沒有空行))即可使 python 路徑正常運作。
現在一些 python 程式碼將運行,但我仍然遇到一些麻煩,我相信它可能來自 python sys 路徑參數。 我相信我可能需要使用一些轉義字元來載入文字文件,但我對它們還沒有很好的理解... 我嘗試過測試一些東西,但還沒有找到正確的解決方案。
這是在文字檔案中包含系統路徑的正確方法嗎?
-------------------------------------------------- -------------------------------------------------- --------------------
{“”,
“C:\\ Users \\ EstelleS1 \\ AppData \\ Local \\ Programs \\ Python \\ Python37 \\ JMPPythonEnvironment \\ Scripts \\ python37.zip”,
“C:\\ Users \\ EstelleS1 \\ AppData \\ Local \\ Programs \\ Python \\ Python37 \\ DLLs”,
“C:\\ Users \\ EstelleS1 \\ AppData \\ Local \\ Programs \\ Python \\ Python37 \\ lib”,
“C:\\Users\\EstelleS1\\AppData\\Local\\Programs\\Python\\Python37”,
“C:\\ Users \\ EstelleS1 \\ AppData \\ Local \\ Programs \\ Python \\ Python37 \\ JMPPythonEnvironment”,
“C:\\ Users \\ EstelleS1 \\ AppData \\ Local \\ Programs \\ Python \\ Python37 \\ JMPPythonEnvironment \\ lib \\ site-packages”}
-------------------------------------------------- -------------------------------------------------- --------------------
當我將其加載到 JMP 並使用 Show() 時,日誌輸出:
PythonSysPathText = "{\!"\!",
\!"C:\\Users\\EstelleS1\\AppData\\Local\\Programs\\Python\\Python37\\JMPPythonEnvironment\\Scripts\\python37.zip\!",
\!"C:\\Users\\EstelleS1\\AppData\\Local\\Programs\\Python\\Python37\\DLLs\!",
\!"C:\\Users\\EstelleS1\\AppData\\Local\\Programs\\Python\\Python37\\lib\!",
\!"C:\\Users\\EstelleS1\\AppData\\Local\\Programs\\Python\\Python37\!",
\!"C:\\Users\\EstelleS1\\AppData\\Local\\Programs\\Python\\Python37\\JMPPythonEnvironment\!",
\!"C:\\Users\\EstelleS1\\AppData\\Local\\Programs\\Python\\Python37\\JMPPythonEnvironment\\lib\\site-packages\!"}";它是否正確? 如果是,那麼我在 Python Init 方面遇到了其他問題。
回覆:如何為新的加載項使用者配置 Python Init 路徑和 sys 路徑語句?看更多...