[英]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.