Python PEP 273 и Amazon BotoCore

На маленьком встроенном Linux-устройстве с ограниченным пространством я пытаюсь разместить большую библиотеку BotoCore Amazon (AWS) [10 Mb] (https://github.com/boto/botocore) в zip файле, чтобы сжать его, а затем импортировать в мои скрипты Python, используя zipimport, как описано в PEP273 (https://www.python.org/dev/peps/pep-0273/).

Я изменил свой script на наличие следующих строк в начале:

## Use zip imports
import sys
sys.path.insert(0, '/usr/lib/python2.7/site-packages/site-packages.zip') 

В zip файле сайта-пакетов есть только ботокора, а в каталоге site-packages есть другие модули, которые я использую, но исключая botocore.

Вот список этого каталога:

    /usr/lib/python2.7/site-packages >> ls -rlt
    total 1940
-rw-rw-r-- 1 root root   32984 Jun  8 12:22 six.pyc
-rw-r--r-- 1 root root     119 Jun 11 07:43 README
drwxrwxr-x 2 root root    4096 Jun 11 07:43 requests-2.4.3-py2.7.egg-info
drwxrwxr-x 2 root root    4096 Jun 11 07:43 six-1.9.0-py2.7.egg-info
drwxrwxr-x 2 root root    4096 Jun 11 07:43 python_dateutil-2.4.2-py2.7.egg-info
drwxrwxr-x 2 root root    4096 Jun 11 07:43 jmespath-0.7.0-py2.7.egg-info
-rw-rw-r-- 1 root root    2051 Jun 11 07:44 pygtk.pyc
-rw-rw-r-- 1 root root    1755 Jun 11 07:44 pygtk.pyo
-rw-rw-r-- 1 root root       8 Jun 11 07:44 pygtk.pth
drwxrwxr-x 2 root root    4096 Jun 11 07:44 futures-2.2.0-py2.7.egg-info
drwxrwxr-x 3 root root    4096 Jun 11 07:44 gtk-2.0
drwxrwxr-x 3 root root    4096 Jun 11 07:44 requests
drwxrwxr-x 3 root root    4096 Jun 11 07:44 dbus
drwxrwxr-x 3 root root    4096 Jun 11 07:44 dateutil
drwxrwxr-x 2 root root    4096 Jun 11 07:44 jmespath
drwxrwxr-x 3 root root    4096 Jun 11 07:44 concurrent
drwxrwxr-x 2 root root    4096 Jun 11 07:44 futures
drwxrwxr-x 2 root root    4096 Jun 12 10:42 gobject
drwxrwxr-x 2 root root    4096 Jun 12 10:42 glib
-rwxr-xr-x 1 root root    5800 Jun 12 10:42 _dbus_glib_bindings.so
-rwxr-xr-x 1 root root   77680 Jun 12 10:42 _dbus_bindings.so
-rwxr-xr-x 1 root root 1788623 Jun 12 11:39 site-packages.zip

И вот содержимое этого zipfile: enter image description here

Моя проблема в том, что я могу импортировать boto3 и импортировать только ботокоры, но когда я пытаюсь использовать некоторые методы API, содержащиеся в нем, я получаю исключения вроде этого:

>> Unknown component: enpoint_resolver

или

>> Unable to load data for: aws/_endpoints!

Если я удаляю zip файл после распаковки его в каталоге site-packages и перезагружаюсь - мой script отлично работает.

Как я могу использовать импорт zipfile для сжатия этой огромной библиотеки? Спасибо!

Ответ 1

К сожалению, это просто не сработает.

PEP 273 требует, чтобы авторы библиотек следовали определенным правилам, которых нет в этом пакете. В частности, использует __file__, а не pkgutil.get_data() или эквивалентный API. В результате файлы должны фактически существовать в файловой системе.

Вы можете попробовать использовать FUSE для монтирования ZIP файла в файловой системе, поэтому он кажется Python, как будто он несжатый, не занимая при этом всего этого дискового пространства. Просто просматривая Google, я придумал fuse-zip, который выглядит так, как будто он может быть подходящим. Вы хотите запустить некоторые тесты, чтобы обеспечить хорошую работу в вашей системе.