2016-01-17 32 views
1

我的理解是,只要使用非Apple默認的Python構建,最終用戶不需要安裝Python執行一個py2app構建的應用程序。在我自己的環境中開發和測試應用程序時,我顯然已經安裝了Python。具體來說,我使用python.org安裝了一個pyenv,而不是Apple自己的。然而,當我將應用程序提供給沒有安裝Python的最終用戶時,她得到:在pyenv中使用py2app構建的應用程序無法在其他機器上運行

無法找到Python運行時。您可能需要安裝Python的框架構建,或者編輯此應用程序的Info.plist文件中的 中的PyRuntimeLocations數組。

第二行是關於;如果它指出是真的,那麼一個單獨的應用程序實例將需要爲最終用戶的每一個可能的位置的安裝如/usr/bin/Library/Frameworks等待建

UPDATE: Info.plist的定義:

<key>PythonExecutable</key> 
<string>/Library/Frameworks/Python.framework/Versions/2.6/Resources/Python.app/Contents/MacOS/Python</string 

然而,最終用戶只有在/usr/bin中安裝了系統。

這是否意味着每一個終端用戶需要有一個外部安裝了Python,它必須住在/Library/Frameworks/Python.framework/Versions/2.6/Resources/Python.app/Contents/MacOS/Python

如果他們沒有什麼非蘋果的Python?如果他們有一個非Apple Python,但它不是2.6?如何避免這種有點硬編碼的依賴關係?

+0

'find MyAppliation.app -name Python。框架'什麼都不返回 – Pyderman

回答

0

如果py2app認爲你正在使用系統解釋器,它將自動默認爲--semi-standalone模式。從Python.org你的解釋不應該算作一個「系統」的解釋,但你可以看到什麼py2app自以爲使用這個命令:

$ python -c "import py2app.build_app; print py2app.build_app.is_system()" 
False 

一個問題需要注意的:我安裝了一個Python.org翻譯後今天,bash沒有更新它的hash緩存,當我啓動python時導致奇怪的不兼容性。我不得不鍵入hash -r python來重置緩存,並確保正確版本的python正在使用。 (解決這個問題的另一種方法是註銷並重新登錄。)我想可能是同一問題可能導致py2app對您是否使用系統python感到困惑。

如果這樣做並不能解決問題,那麼可以嘗試將python解釋器安裝到一個奇怪的位置,比如~/mypython或類似的東西,只是爲了確保它無法混淆爲系統python。

作爲最後的手段,我想你可以破解py2app源代碼,以便is_system()總是返回False。不知道這是否會產生任何不良後果。

PS - 下面是使用py2appconda -packaged應用小教程: https://github.com/stuarteberg/helloworld不完全是有關您的問題就在這裏,但你可以用你自己的設置進行比較,並尋找任何顯着的差異。

相關問題