Windows7下Python2与3共存,py -2无法识别旧模块的问题咨询
我来帮你捋清楚这个问题,你遇到的情况其实是ArcGIS 10.6自带的定制版Python 2.7干扰了原本的Python环境,咱们一步步解决:
为什么sys.path被修改了?
ArcGIS 10.6会自带一套专属的Python 2.7环境,安装过程中它会做这几件事:
- 修改系统的
PYTHONPATH环境变量,把ArcGIS相关的路径加到最前面 - 在Python的site-packages目录中添加
.pth文件,强制将ArcGIS的路径插入到sys.path的优先级位置
这就导致你用py -2调用的其实是ArcGIS的Python版本,而不是你自己安装在C:\Python27的那个,所以sys.path里全是ArcGIS的路径,自然找不到你原来安装的模块。
让py -2识别旧模块的几种方法
方法1:直接调用原生Python2.7的可执行文件
跳过py launcher,直接用你自己安装的Python2.7来运行脚本:
C:\Python27\python.exe your_script.py
这样会直接加载C:\Python27的环境,sys.path也会包含你原来安装模块的C:\Python27\Lib\site-packages目录。
方法2:修改py launcher的配置文件
如果你习惯用py -2的方式,可以通过配置文件指定py -2指向你的原生Python2.7:
- 打开用户目录(比如
C:\Users\你的用户名) - 创建或编辑
py.ini文件,添加以下内容:
[defaults] python2=C:\Python27\python.exe
保存后,再运行py -2 your_script.py就会优先调用你自己的Python2.7了。
方法3:临时在脚本中添加路径(应急方案)
如果只是个别脚本需要调用旧模块,可以在脚本开头手动把原生Python的site-packages路径加入sys.path:
#! python2 import sys # 把原生Python2.7的模块路径添加进去 sys.path.append('C:\\Python27\\Lib\\site-packages') from pytube import YouTube # 后续代码...
不过这个方法需要每个脚本都加,适合临时应急,不如前两种方法彻底。
额外提醒
ArcGIS的Python环境是独立定制的,和你自己安装的Python2.7是完全分开的。你在原生Python2.7里用pip install安装的模块(比如pytube),ArcGIS的Python环境里是没有的,这也是为什么会出现No module named ___错误的核心原因。如果需要在ArcGIS环境中使用模块,得用ArcGIS自带的pip(一般在C:\Python27\ArcGIS10.6\Scripts\pip.exe)来安装。
内容的提问来源于stack exchange,提问作者GreyHippo

