我在 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 library not found: 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
安装:
I have python installed in Linux
$ which python /grid/common/pkgs/python/v2.7.6/bin/python
这可能会导致 pyinstaller
无法从您的系统中找到 libpython
文件。来自When Things Go Wrong pyinstaller
文档部分:
One of these errors can be puzzling, however:
IOError("Python library not found!")
PyInstaller needs to bundle the Python library, which is the main part of the Python interpreter, linked as a dynamic load library. The name and location of this file varies depending on the platform in use.
在 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- 中的 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
对于您使用非标准路径的情况,同一帮助页面还提供了解决方案:
The places where PyInstaller looks for the python library are different in different operating systems, but
/lib
and/usr/lib
are checked in most systems. If you cannot put the python library there, try setting the correct path in the environment variableLD_LIBRARY_PATH
in Linux orDYLD_LIBRARY_PATH
in OS X.
现在,我不知道你是如何在你的系统上安装 Python 的,所以我不知道你的 libpython
文件在哪里(或者它们是否存在)。你可以做的是:
- 找到
libpython
文件的路径- 也许它在/grid/common/pkgs/python/v2.7.6/lib 下?
- 您可以
find/path/to/pkgs -name libpython*
- 如果没有
libpython
文件,您需要先安装它。- 在 Linux 上,这通常由
apt-get install python2.7-dev
完成
- 在 Linux 上,这通常由
- 将
libpython*
文件的路径添加到您的LD_LIBRARY_PATH
- 尝试
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/dir/with/libpython
- 或查看 How to set the environmental variable LD_LIBRARY_PATH in linux
- 尝试
旁注,我不熟悉 Azure DevOps(如您在标题中所述),但我不建议将 python
(以及所有其他 deps/packages)安装到一些非标准的路径,尤其是当您需要引用它的其他工具时。
关于python - 在 Azure DevOps 上的 Linux 上使用 pyinstaller 获取 "IOError: Python library not found",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55998627/