【问题标题】:Getting "IOError: Python library not found" with pyinstaller on Linux on Azure DevOps在 Azure DevOps 上的 Linux 上使用 pyinstaller 获取“IOError: Python library not found”
【发布时间】:2019-09-23 16:50:06
【问题描述】:

我在 Linux 中安装了 python

$ which python
/grid/common/pkgs/python/v2.7.6/bin/python

我也有 pyinstaller

$ which pyinstaller
/grid/common/pkgs/python/v2.7.6/bin/pyinstaller

现在我在 /home/username/test/ 目录中创建了一个示例 python 文件 hello.py

print "Hello World!!"

使用 pyinstaller,当我尝试使用以下命令为其创建可执行文件时,我得到了

IOError:找不到 Python 库:libpython2.7mu.so.1.0, libpython2.7.so.1.0、libpython2.7m.so.1.0

 $ pyinstaller hello.py

 532 INFO: PyInstaller: 3.2.1
 532 INFO: Python: 2.7.6
 534 INFO: Platform: Linux-2.6.18-371.el5-x86_64-with-redhat-5.10-Tikanga
 536 INFO: wrote /home/username/test/hello.spec
 591 INFO: UPX is not available.
 602 INFO: Extending PYTHONPATH with paths
 ['/home/username/test', '/home/username/test']
 602 INFO: checking Analysis
 602 INFO: Building Analysis because out00-Analysis.toc is non existent
 603 INFO: Initializing module dependency graph...
 639 INFO: Initializing module graph hooks...
 757 INFO: running Analysis out00-Analysis.toc
 819 INFO: Caching module hooks...
 858 INFO: Analyzing /home/username/test/hello.py
 859 INFO: Loading module hooks...
 860 INFO: Loading module hook "hook-encodings.py"...
 6735 INFO: Looking for ctypes DLLs
 6736 INFO: Analyzing run-time hooks ...
 6741 INFO: Looking for dynamic libraries
 7285 INFO: Looking for eggs
 7286 INFO: Python library not in binary depedencies. Doing additional searching...
 Traceback (most recent call last):
 File "/grid/common/pkgs/python/v2.7.6/bin/pyinstaller", line 9, in <module>
   load_entry_point('PyInstaller==3.2.1', 'console_scripts', 'pyinstaller')()
 File "/grid/common/pkgs/python/v2.7.6/lib/python2.7/site-
 packages/PyInstaller-3.2.1-py2.7.egg/PyInstaller/__main__.py", line 90, in run
   run_build(pyi_config, spec_file, **vars(args))
 File "/grid/common/pkgs/python/v2.7.6/lib/python2.7/site-
 packages/PyInstaller-3.2.1-py2.7.egg/PyInstaller/__main__.py", line 46, in 
   run_build PyInstaller.building.build_main.main(pyi_config, spec_file, **kwargs)
 File "/grid/common/pkgs/python/v2.7.6/lib/python2.7/site-
 packages/PyInstaller-3.2.1-py2.7.egg/PyInstaller/building/build_main.py", 
 line 788, in main
   build(specfile, kw.get('distpath'), kw.get('workpath'), kw.get('clean_build'))
 File "/grid/common/pkgs/python/v2.7.6/lib/python2.7/site-
 packages/PyInstaller-3.2.1-py2.7.egg/PyInstaller/building/build_main.py",      
 line 734, in build
   exec(text, spec_namespace)
 File "<string>", line 16, in <module>
 File "/grid/common/pkgs/python/v2.7.6/lib/python2.7/site-     
 packages/PyInstaller-3.2.1-py2.7.egg/PyInstaller/building/build_main.py", 
 line 212, in __init__
   self.__postinit__()
 File "/grid/common/pkgs/python/v2.7.6/lib/python2.7/site-
 packages/PyInstaller-3.2.1-py2.7.egg/PyInstaller/building/datastruct.py", 
 line 161, in __postinit__
   self.assemble()
 File "/grid/common/pkgs/python/v2.7.6/lib/python2.7/site-
 packages/PyInstaller-3.2.1-py2.7.egg/PyInstaller/building/build_main.py", 
 line 543, in assemble
   self._check_python_library(self.binaries)
 File "/grid/common/pkgs/python/v2.7.6/lib/python2.7/site-
 packages/PyInstaller-3.2.1-py2.7.egg/PyInstaller/building/build_main.py", 
 line 626, in _check_python_library
   raise IOError(msg)
 IOError: Python library not found: libpython2.7mu.so.1.0, libpython2.7.so.1.0, libpython2.7m.so.1.0
 This would mean your Python installation doesn't come with proper library files.
 This usually happens by missing development package, or unsuitable build parameters of Python installation.

 * On Debian/Ubuntu, you would need to install Python development packages
 * apt-get install python3-dev
 * apt-get install python-dev
 * If you're building Python by yourself, please rebuild your Python with `--enable-shared` (or, `--enable-framework` on Darwin)

请任何人告诉我如何解决此错误并使用它创建单个可执行文件。

【问题讨论】:

    标签: python linux pyinstaller


    【解决方案1】:

    你似乎有一个非标准的python 安装:

    我在 Linux 中安装了 python

    $ which python 
    /grid/common/pkgs/python/v2.7.6/bin/python
    

    这可能会导致pyinstaller 无法从您的系统中找到libpython 文件。来自pyinstaller 文档的When Things Go Wrong 部分:

    其中一个错误可能令人费解,但是:IOError("Python library not found!") PyInstaller 需要捆绑 Python 库,即 Python 解释器的主要部分,作为动态加载链接 图书馆。此文件的名称和位置取决于 使用中的平台。

    在 Linux 和 Python 2.7 上,当您安装 python2.7-dev 时,那些 libpython* 文件通常位于 /usr/lib/x86_64-linux-gnu/ 下:

    $ apt-get install python2.7-dev
    $ find /usr/lib -name libpython*
    /usr/lib/python2.7/config-x86_64-linux-gnu/libpython2.7-pic.a
    /usr/lib/python2.7/config-x86_64-linux-gnu/libpython2.7.a
    /usr/lib/python2.7/config-x86_64-linux-gnu/libpython2.7.so
    /usr/lib/x86_64-linux-gnu/libpython2.7.a
    /usr/lib/x86_64-linux-gnu/libpython2.7.so.1.0
    /usr/lib/x86_64-linux-gnu/libpython2.7.so.1
    /usr/lib/x86_64-linux-gnu/libpython2.7.so
    

    在我的机器上,当我在没有设置任何其他选项的情况下运行 pyinstaller 时,它会自动使用 /usr/lib/x86_64-linux-gnu 中的 libpython

    1632 INFO: Python library not in binary dependencies. Doing additional searching...
    1654 INFO: Using Python library /usr/lib/x86_64-linux-gnu/libpython2.7.so.1.0 
    

    对于您使用非标准路径的情况,该帮助页面也提供了解决方案:

    PyInstaller 查找 python 库的地方是 在不同的操作系统中有所不同,但/lib/usr/lib 是 在大多数系统中检查。如果你不能把 python 库放在那里, 尝试在环境变量中设置正确的路径 LD_LIBRARY_PATH 在 Linux 中或 DYLD_LIBRARY_PATH 在 OS X 中。

    现在,我不知道您是如何在系统上安装 Python 的,所以我不知道您的 libpython 文件在哪里(或者它们是否存在)。你可以做的是:

    1. 找到libpython文件的路径
      • 也许它在 /grid/common/pkgs/python/v2.7.6/lib 下?
      • 你可以做find /path/to/pkgs -name libpython*
    2. 如果没有libpython文件,需要先安装。
      • 在 Linux 上,这通常由 apt-get install python2.7-dev 完成
    3. libpython* 文件的路径添加到您的LD_LIBRARY_PATH

    在旁注中,我不熟悉 Azure DevOps(正如您在标题中指出的那样),但我不建议将 python(和所有其他 deps/包)安装到一些非标准路径,尤其是当您需要引用它的其他工具。

    【讨论】:

      猜你喜欢
      • 2016-07-02
      • 2021-07-28
      • 1970-01-01
      • 2019-12-28
      • 1970-01-01
      • 2020-12-10
      • 2021-02-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多