Python PEP 273 和 Amazon BotoCore

Python PEP 273 and Amazon BotoCore

提问人:PhilBot 提问时间:6/13/2015 最后编辑:myersjustincPhilBot 更新时间:10/22/2015 访问量:280

问:

在空间有限的小型嵌入式 Linux 设备上,我尝试将大型 [10 Mb] Amazon (AWS) BotoCore 库 (https://github.com/boto/botocore) 放在一个 zip 文件中以对其进行压缩,然后使用 zipimport 将其导入我的 Python 脚本中,如 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') 

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

以下是该 zipfile 的内容:enter image description here

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

>> Unknown component: enpoint_resolver

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

如果我在site-packages目录中解压缩zip文件并重新启动后将其删除 - 我的脚本工作正常。

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

python-2.7 python-import pep botocore

评论

1赞 Zizouz212 6/18/2015
天哪,提供您的全部代表!:O
2赞 PhilBot 6/18/2015
当你想要一个答案时,代表是什么?
1赞 Zizouz212 6/18/2015
我想。。。但仍然!
1赞 oefe 6/22/2015
中是否缺少“d”?enpoint_resolver

答:

6赞 Kevin 6/15/2015 #1

不幸的是,这是行不通的。

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

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