Python PEP 273和Amazon BotoCore

Phi*_*Bot 10 python python-import pep python-2.7 botocore

在一个空间有限的小型嵌入式Linux设备上,我试图将大型[10 Mb]亚马逊(AWS)BotoCore库(https://github.com/boto/botocore)放在一个zip文件中进行压缩,然后导入它在我的Python脚本中使用zipimport,如PEP273(https://www.python.org/dev/peps/pep-0273/)中所述.

我修改了我的脚本,在开头有以下几行:

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

site-packages zip文件中只包含botocore,而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
Run Code Online (Sandbox Code Playgroud)

以下是该zipfile的内容: 在此输入图像描述

我的问题是我可以导入boto3并导入botocore只是找到,但是当我尝试使用其中包含的一些API方法时,我得到这样的异常:

>> Unknown component: enpoint_resolver
Run Code Online (Sandbox Code Playgroud)

要么

>> Unable to load data for: aws/_endpoints!
Run Code Online (Sandbox Code Playgroud)

如果我在site-packages目录中解压缩后删除了zip文件并重新启动 - 我的脚本运行正常.

如何利用zipfile导入来压缩这个巨大的库?谢谢!

Kev*_*vin 7

不幸的是,这不会起作用.

PEP 273要求图书馆作者遵循某些规则,而这个规则没有.特别是,它使用__file__而不是pkgutil.get_data()或等效的API.因此,文件必须实际存在于文件系统中.

您可能尝试使用FUSE将.zip文件挂载到文件系统中,因此它看起来像Python一样未压缩,而实际上没有占用所有磁盘空间.只是浏览Google,我想出了fuse-zip,它看起来很合适.您需要运行一些基准测试,以确保它在您的系统上运行良好.