我在名为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解压缩到一个目录然后尝试导入它,它们就会被导入?
答案 0 :(得分:0)
如果资源位于存档分发中(例如压缩蛋), 它将被提取到缓存目录
默认缓存目录由函数get_default_cache()
确定。 doc说
确定从中提取资源的默认缓存位置 拉链蛋。此例程返回PYTHON_EGG_CACHE环境 变量,如果设置。否则,在Windows上,它返回“Python-Eggs” 用户“Application Data”目录的子目录。在所有其他 系统,它返回os.path.expanduser(“〜/ .python-eggs”)if 未设置PYTHON_EGG_CACHE。
所以,我的猜测是你的eggs
缓存文件夹存在问题。