簡體   English   中英

在制作二進制文件時,PyInstaller找不到libpython2.7.so?

[英]PyInstaller cannot find libpython2.7.so when making binary?

我正在嘗試使用Linux上的PyInstaller 2.0制作Python腳本的二進制版本。 當我跑:

$ python pyinstaller.py myscript.py

我收到錯誤:

8907 INFO: Looking for Python library libpython2.7.so
Traceback (most recent call last):
...
  File "pyinstaller.py", line 91, in <module>
    raise IOError("Python library not found!")
IOError: Python library not found!

怎么解決這個問題?

我在用:

Linux#98-Ubuntu x86_64 GNU / Linux

用python 2.7。 系統上還有其他的Pythons但是我已經設定了:

alias python="python2.7"

在我使用的服務器中,只有/usr/lib/python2.6而不是/usr/lib/python2.7但我經常使用python 2.7並且功能正常等等所以我不明白為什么它找到它的庫會有問題。 有一個/usr/local/lib/libpython2.7.a

在我使用的服務器中,只有/usr/lib/python2.6而不是/usr/lib/python2.7但我經常使用python 2.7並且功能正常等等所以我不明白為什么它找到它的庫會有問題。 有一個/usr/local/lib/libpython2.7.a。

如果沒有libpython2.7.so ,當然找到該庫將是一個問題。

您能夠使用Python解釋器的原因可能是它是靜態鏈接的。

有兩種方法可以解決這個問題。

首先,您可以為Python 2.7安裝共享庫。 如果您使用的是舊版本的Ubuntu,比如Python 2.6,並且您從python2.7軟件包安裝了2.7,那么這應該只是安裝libpython2.7

如果你已從其他來源獲得2.7,那么Ubuntu libpython2.7軟件包顯然無法正常工作 - 或者它可以通過安裝python2.7的第二個副本來工作,可能會覆蓋你已經擁有的一些文件,並且絕對讓你困惑。 無論哪種方式,都不要這樣做。 要么為現有的2.7獲取剩余的Python,要么卸載2.7並使用Ubuntu包。 (對於某些Python發行版,“獲取其余部分”是不可能的,因為如果安裝共享庫,則會獲得動態鏈接的Python可執行文件而不是靜態鏈接的文件。在這種情況下,您幾乎必須卸載並重新安裝。)

其次,您可以使用PyInstaller的static-lib支持。 有關詳細信息,請參閱故障單420 ,但簡單的想法是,如果啟用了此功能,並且PyInstaller認為您的平台應該有libpython2.7.so但無法找到它,它將查找libpython2.7.a並靜態相反的鏈接。 上次我需要這個,它沒有檢查到主干。 從快速瀏覽一下PyInstaller單,看起來現在包含補丁,但在默認的PyInstaller構建中禁用,里程碑設置為3.0,因此,您可能仍需要手動構建PyInstaller才能使其正常工作。

最后一兩件事:這有可能是有libpython2.7.so,但它剛剛安裝的地方像怪異/opt/python27/lib或什么的,用/opt/python27無處你的路徑上,但/usr/local/bin/python27可以找到它,因為它是顯式構建的,以便從/opt/python27獲取內容。 對於使用MacPorts或Fink的Mac用戶而言,這種事情往往只是一個問題,而不是Linux用戶,但這並非不可能。 如果您認為這可能是問題,可以查看/usr/local/bin/python27的dl表。

有兩個選項:libpython * .so存在或在您的系統上不存在。 您可以從任何從根目錄開始的查找實用程序進行檢查。 如果文件已經存在但仍然無法通過PyInstaller找到:最通用的建議只是打開PyInstaller代碼並找到負責查​​找此庫的模塊。 它可以通過簡單的編輯器完成。 然后轉到此模塊並編輯他以了解您的特定系統有什么問題。 代碼簡單而且不成熟 - 需要大約5分鍾才能理解原因。 在我的情況下,我剛剛將LD_LIBRARY_PATH = / usr / local / lib添加到我的用戶配置文件(.bash_profile)並確保此* .so文件位於其中。 如果文件不在您的系統上或您的版本不正確:只需重新安裝python。

正如@abarnert已經說過,問題似乎是python的靜態編譯。 要解決這個問題需要重新編譯python,但這次添加標志--enable-shared

    [root@machine ~]# ./configure --prefix=/usr/local --enable-shared
    [root@machine ~]# make && make altinstall

執行此操作后,您將在/ usr / local / lib路徑下找到所請求的庫( libpython2.7.so.1.0 ),因此不要忘記將該文件夾添加到$ LD_LIBRARY_PATH環境變量中:

    [root@machine tmp]$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib

暫無
暫無

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

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