繁体   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