Получение сообщения «Ошибка ввода-вывода: библиотека Python не найдена» с помощью pyinstaller в Linux на DevOps Azure - PullRequest
0 голосов
/ 06 мая 2019

У меня установлен python в Linux

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

и у меня также есть pyinstaller

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

Теперь я создал пример файла python hello.py в / home / username / test/ directory

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)

Кто-нибудь подскажет, как устранить эту ошибку и создать с ее помощью отдельный исполняемый файл.

1 Ответ

0 голосов
/ 06 мая 2019

У вас нестандартная python установка:

У меня установлен python в Linux

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

Это, вероятно, вызывает pyinstaller кне удалось найти файлы libpython из вашей системы.Из раздела Когда все идет не так документа pyinstaller:

Однако одна из этих ошибок может вызывать недоумение: 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 без установки каких-либо других параметров, он автоматически использовал libpython из / usr / lib / x86_64-linux-gnu :

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

На sidenote яне знакомы с DevOps Azure (как вы указали в заголовке), но я НЕ рекомендую устанавливать python (и все другие deps / пакеты) по некоторым нестандартным путям, особенно когда вам требуются другие инструменты, которые ссылаются на него.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...