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

7 python python-module pyinstaller python-2.7

我正在尝试在Linux上使用PyInstaller 2.0制作Python脚本的二进制版本.当我跑:

$ python pyinstaller.py myscript.py
Run Code Online (Sandbox Code Playgroud)

我收到错误:

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!
Run Code Online (Sandbox Code Playgroud)

怎么解决这个问题?

我在用:

Linux#98-Ubuntu x86_64 GNU/Linux

用python 2.7.系统上还有其他的Pythons但是我已经设定了:

alias python="python2.7"
Run Code Online (Sandbox Code Playgroud)

在我正在使用的服务器中,只有/usr/lib/python2.6而且没有,/usr/lib/python2.7但是我经常使用python 2.7并且功能正常等等所以我不明白为什么找到它的库会有问题.有一个/usr/local/lib/libpython2.7.a.

aba*_*ert 6

在我使用的服务器中,只有/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可执行文件而不是静态链接的文件.在这种情况下,您几乎必须卸载并重新安装.)

其次,您可以使用PyInstallerstatic-lib支持.有关详细信息,请参阅故障单420,但简单的想法是,如果启用此功能,并且PyInstaller认为您的平台应该具有libpython2.7.so但无法找到它,则它将寻找一个libpython2.7.a静态链接.上次我需要这个,它没有检查到主干.通过快速浏览一下故障单,看起来现在包含补丁,但在默认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表.