使二进制文件时PyInstaller找不到libpython2.7.so?(PyInstaller

2019-08-16 17:40发布

我努力让自己在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。 有系统上的其他蟒蛇,但我有它设置如下:

alias python="python2.7"

在我使用的服务器,仅存在的/usr/lib/python2.6而不是/usr/lib/python2.7但是Python 2.7是由我经常使用,是功能性的,等等,所以我没有看到它为什么是找到它的库的问题。 有一个/usr/local/lib/libpython2.7.a

Answer 1:

在我使用的服务器,也只有/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中来了,你从已安装的2.7 python2.7包,这应该只是安装的问题libpython2.7

如果您已在2.7从其他来源得到,Ubuntu的libpython2.7包显然是行不通的,或者它会通过安装的第二个副本工作python2.7 ,可能覆盖一些你已经拥有的文件,并绝对迷惑你。 无论哪种方式,不这样做。 无论是获得的Python其余为现有的2.7,或卸载2.7和使用Ubuntu的软件包。 (对于一些Python发行,“得到它的其余部分”是不可能的,因为如果你安装的共享库,你会得到一个动态链接Python可执行程序,而不是你静态链接的一个。在这种情况下,你几乎必须卸载并重新安装。)

其次,你可以使用PyInstaller的静态-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 。 这种事情往往只针对Mac用户的MacPorts与芬克或者,不是Linux用户是一个问题,但它不是不可能的。 你可以看一下对DL表/usr/local/bin/python27 ,如果你认为这可能是问题。



Answer 2:

有2个选项:libpython *。所以存在或不存在,您的系统上。 您可以通过从根目录开始任何find工具检查。 如果该文件已经存在,但仍无法PyInstaller发现:最通用的建议是只开PyInstaller代码,并找到模块,负责找到这个库。 它可以用简单的编辑器来完成。 不是去这个模块和编辑他明白什么是错的特定的系统。 该代码是简单和过早 - 它会带你〜5分钟,以明白其中的道理。 在我来说,我只是增加了LD_LIBRARY_PATH =在/ usr / local / lib目录到我的用户配置文件(.bash_profile文件),并确保该* .so文件里面。 如果该文件是不是您的系统上,或者你有不正确的版本:只有重装蟒蛇。



Answer 3:

正如@abarnert已经说了,这个问题似乎是一个Python的静态编译。 为了解决这个问题,需要重新编译蟒蛇,但增加了标志--enable-共享这个时候:

    [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


文章来源: PyInstaller cannot find libpython2.7.so when making binary?