【发布时间】:2016-04-21 08:38:12
【问题描述】:
我正在尝试导入一个用 numpy 打包的 zip 文件。
我已将 numpy 压缩到 packages.zip。但是,在使用 zip 文件时,我收到以下导入错误。
> python
Python 2.7.9 (default, Jan 7 2015, 11:49:12)
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.56)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path.insert(0, 'packages.zip')
>>> import numpy
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "packages.zip/numpy/__init__.py", line 180, in <module>
File "packages.zip/numpy/add_newdocs.py", line 13, in <module>
File "packages.zip/numpy/lib/__init__.py", line 8, in <module>
File "packages.zip/numpy/lib/type_check.py", line 11, in <module>
File "packages.zip/numpy/core/__init__.py", line 14, in <module>
ImportError: cannot import name multiarray
>>>
检查 numpy/core 后,我发现 __init__.py 正在尝试导入 multiarray.so 文件。
我该如何解决这个错误?谢谢
【问题讨论】:
-
您是如何构建 .zip 文件的?操作系统不会从 .zip 文件中读取
.so文件,因此您不能只压缩 numpy 目录。 Setuptools 有一个bdist_egg命令,它通过生成存根 .py 文件来处理库,这些 .py 文件将 .so 文件提取到操作系统可以使用它们的磁盘。 -
pip install -r requirements.txt --target ./packagescd packagesfind . -name "*.pyc" -deletefind . -name "*.egg-info" | xargs rm -rfzip -9mrv packages.zip -
@tdelaney 你能详细说明一下吗?我需要在 map-reduce 环境中使用这个 zip。