为何pip3安装的本地包仅Python 2.7可用,Python 3.x提示ModuleNotFoundError?
问题分析与解决方案
这种情况大概率是你的pip3命令并没有真正关联到Python 3.6环境,导致执行pip3 install -e .时,实际是用Python 2的pip完成了安装,所以Python 3里找不到包。下面具体分析原因和解决办法:
一、先确认pip3的实际指向
先执行这个命令看看pip3到底绑定的是哪个Python版本:
pip3 --version
如果输出里显示的是Python 2.7的路径,那问题就找到了——你的pip3其实是Python 2的pip的别名,这通常是系统环境变量配置混乱导致的。
二、用Python 3的绝对路径来执行安装
既然sys.executable已经指向/usr/local/opt/python/bin/python3.6,那直接用这个Python的-m pip来安装,就能确保包安装到Python 3.6的环境里:
/usr/local/opt/python/bin/python3.6 -m pip install -e .
这种方式绕开了pip3命令的路径问题,直接调用目标Python版本自带的pip模块,是最稳妥的做法。
三、检查虚拟环境(如果使用的话)
如果你是在虚拟环境里操作,要确保已经激活了Python 3.6对应的虚拟环境。激活后,python和pip都会自动关联到虚拟环境里的Python版本,这时候再执行pip install -e .就不会出错了。
四、排查setup.py的配置问题
极少数情况下,setup.py里如果硬编码了Python版本或者安装路径,也可能导致安装到错误的环境。检查你的setup.py,确保没有类似这样的代码:
# 错误示例,不要写死路径 install_requires=[...], scripts=['...'], data_files=[('/usr/local/lib/python2.7/site-packages', [...])]
正常的setup.py应该遵循标准打包规范,不要指定固定的Python版本或安装路径。
执行完上面的步骤后,再在Python 3.6环境里尝试import funniest,应该就能正常导入了。
内容的提问来源于stack exchange,提问作者askmeasku
相关产品推荐
相关产品推荐

