ImportError: невозможно импортировать пакеты имен - PullRequest
0 голосов
/ 14 февраля 2019

Я использую cx_Freeze версии 5.1.1, и у меня есть приложение python 2.7.9 для упаковки с использованием cx_Freeze.Приложение использует модуль Python «запросы» (версия запросов - 2.18.4)

Вот мой файл cx_Freeze setup.py (обратите внимание, что я специально включаю «запросы» в пакеты для включения):

from cx_Freeze import setup, Executable
import sys

from cx_Freeze import setup, Executable

packages_to_include =['lib','lib/DB','encodings.ascii','requests']

buildOptions = dict(
    optimize=1,
    excludes = ['tkinter'],
    bin_includes = [
        'libcrypto.so.1.0.0',
        'libcrypto.so.10',
        'libgssapi_krb5.so.2',
        'libk5crypto.so.3',
        'libkeyutils.so.1',
        'libssl.so.1.0.1e',
        'libssl.so.10'
    ],
    includes = packages_to_include,
    packages= ['urllib3','idna']
)

executables = [
    Executable(
        'workapp.py',
        targetName = 'workapp'
    )
]

setup(
    name='Sample Flask App',
    version = '0.1',
    description = 'Sample Flask App',
    #requires = ["requests"],
    options = dict(build_exe = buildOptions),
    executables = executables
)

Сборка успешно завершилась при создании исполняемого файла, но при запуске моего приложения я получил следующую ошибку:

Traceback (most recent call last):
  File "/usr/local/lib/python2.7/site-packages/cx_Freeze/initscripts/__startup__.py", line 14, in run
    module.run()
  File "/usr/local/lib/python2.7/site-packages/cx_Freeze/initscripts/Console.py", line 26, in run
    exec(code, m.__dict__)
  File "vaas.py", line 2, in <module>
    import requests
  File "/usr/local/lib/python2.7/site-packages/requests/__init__.py", line 113, in <module>
    from . import packages
ImportError: cannot import name packages

Я думаю, это либо проблема с моей настройкой cx_Freeze, либос запросами, но так как я говорю cx_Freeze включить «запросы», это должно работать.Я проверил в каталоге сборки (что cx_Freeze собирает, что для модулей запросов определены «пакеты», и я могу найти его:

[user@centos-vm]$ ls build/exe.linux-x86_64-2.7/lib/requests/packages/
chardet  idna  urllib3

Любая помощь очень ценится!

Ответы [ 2 ]

0 голосов
/ 19 февраля 2019

Найден обходной путь для этой проблемы:

edit:

/usr/local/lib/python2.7/site-packages/requests/__init__.py

и комментарий:

from . import packages

Действительно очень странная проблема.Мое незамерзающее приложение работает просто отлично, но указанный выше обходной путь необходим при использовании cx_freeze.

0 голосов
/ 15 февраля 2019

Попробуйте добавить 'request' к параметру списка packages вместо добавления его к параметрам списка includes:

packages= ['urllib3', 'idna', 'requests']

Согласно документации cx_Freeze опция build_exe includes представляет собой

список имен модулей для включения в запятую

, тогда как опция build_exe packages представляет собой

список пакетов, разделенных запятыми, который включает все подмодули в пакете

...