簡體   English   中英

在 pyenv 中使用 py2app 使用非系統 Python 構建的應用程序無法在其他機器上運行

[英]App built with non-system Python using py2app in pyenv not runnable on other machines

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

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

第二行是關於; 如果它聲明的是真的,那么需要為最終用戶安裝的每個可能位置構建一個單獨的應用程序實例,例如/usr/bin/Library/Frameworks等。

更新: 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

如果他們沒有非 Apple Python 怎么辦? 如果他們有一個非 Apple Python 但它不是 2.6 怎么辦? 如何避免這種有點硬編碼的依賴?

如果--semi-standalone認為您正在使用系統解釋器,它會自動默認為--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不完全是在這里你的問題相關,但你可以用你自己的設置和尋找任何明顯的比較吧差異。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM