Python仅可在dist-packages目录导入harvest模块,如何解决该问题?
解决Python Harvest模块仅特定目录可导入的问题
这问题我之前折腾过好一会儿!核心原因是你的Python解释器默认没把那个egg文件的路径加入sys.path——只有当你在/usr/local/lib/python2.7/dist-packages目录下运行时,Python会自动扫描当前目录里的egg文件,所以能导入;换其他目录就找不到了。
给你几个靠谱的解决方案:
方案一:永久添加egg路径(推荐)
这是一劳永逸的办法,让Python每次启动都自动识别这个模块:
- 打开终端,进入
/usr/local/lib/python2.7/dist-packages目录 - 创建一个后缀为
.pth的文件,比如harvest.pth,命令:touch harvest.pth - 编辑这个文件,把egg文件的完整路径写进去:
/usr/local/lib/python2.7/dist-packages/python_harvest_redux-3.1.1-py2.7.egg - 保存退出后,不管你在哪个目录运行Python,都能正常导入
harvest模块了。
方案二:临时在脚本中添加路径(适合临时测试)
如果只是临时调试,不想改全局配置,可以在你的Python脚本开头加上这段代码:
import sys # 把egg文件的路径添加到sys.path sys.path.append('/usr/local/lib/python2.7/dist-packages/python_harvest_redux-3.1.1-py2.7.egg') import harvest
不过这个方案是硬编码路径,换环境或者模块更新后就得改代码,不推荐长期用。
方案三:用pip重新安装模块(最规范)
如果这个模块是PyPI上的包,建议直接用pip重新安装,它会自动处理路径配置:
- 运行命令:
pip install python-harvest-redux
(如果之前是手动放的egg,可以先卸载:pip uninstall python-harvest-redux,再重新安装)
这样安装后,模块会被正确注册到Python的包管理系统里,任何目录都能正常导入。
补充说明
为什么在/usr/local/lib/python2.7/dist-packages目录下能导入?因为Python启动时会把当前工作目录(.)加入sys.path,而这个egg文件正好在该目录下,Python的egg加载机制会自动识别并加载它。但换其他目录时,当前目录不在sys.path里包含这个egg的路径,所以就会抛出ImportError。
内容的提问来源于stack exchange,提问作者vineet karkhanis
相关产品推荐
相关产品推荐

