在python路径中的Zip不能按预期工作

时间:2015-12-08 05:25:14

标签: python

我在名为msgpack的zip文件中有msgpack.zip个模块。

当我将zip文件添加到python路径时,我能够导入模块,但不能导入它的编译部分:

>>> import sys
>>> sys.path.insert(0, 'msgpack.egg')
>>> import msgpack
>>> from msgpack._packer import Packer
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named 'msgpack._packer'
>>>

然而,如果我将zip文件解压缩到我所在的同一目录,那么它可以工作:

验证我没有通过其他方式安装msgpack ...

cmadrigal-MBP:tmp caleb.madrigal$ ls
msgpack   msgpack.zip

cmadrigal-MBP:tmp caleb.madrigal$ python3
Python 3.4.3 (default, Nov 20 2015, 11:10:55)
[GCC 4.2.1 Compatible Apple LLVM 6.1.0 (clang-602.0.49)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import msgpack
>>> from msgpack._packer import Packer
>>>

请注意,我的计算机上的任何其他路径都没有msgpack。如果我从我正在使用的目录中删除msgpack文件夹,则会在import msgpack上收到导入错误。

所以问题是,为什么导入zip中包含的模块不会导入库的编译部分,但如果我将zip解压缩到一个目录然后尝试导入它,它们就会被导入?

1 个答案:

答案 0 :(得分:0)

根据documentation

  

如果资源位于存档分发中(例如压缩蛋),   它将被提取到缓存目录

默认缓存目录由函数get_default_cache()确定。 doc

  

确定从中提取资源的默认缓存位置   拉链蛋。此例程返回PYTHON_EGG_CACHE环境   变量,如果设置。否则,在Windows上,它返回“Python-Eggs”   用户“Application Data”目录的子目录。在所有其他   系统,它返回os.path.expanduser(“〜/ .python-eggs”)if   未设置PYTHON_EGG_CACHE。

所以,我的猜测是你的eggs缓存文件夹存在问题。