使用virtualenv配置Python3.5虚拟环境及迁移系统包的方法咨询
解决虚拟环境继承系统Python3.5包的问题
嘿,我来帮你捋清楚这个问题~首先得明确virtualenv在Python2和Python3下的默认行为差异:
- 对于Python2来说,早期版本的virtualenv默认不隔离系统site-packages,所以你直接跑
virtualenv venv创建的环境能自动获取系统里的包; - 但到了Python3对应的virtualenv版本,默认改成了隔离系统包(相当于默认加了
--no-site-packages参数),这就是为什么你创建的Python3.5虚拟环境里site-packages的包数量很少的原因。
最稳妥的解决方法:重新创建带继承参数的虚拟环境
如果你还没在这个虚拟环境里安装太多自定义包,最推荐的方式是删掉现有环境,重新用以下命令创建:
virtualenv --system-site-packages -p python3.5 venv
--system-site-packages:明确告知virtualenv要继承系统的site-packages内容;-p python3.5:指定用Python3.5作为虚拟环境的基础解释器(确保你的Mac已经安装了Python3.5)。
这样创建出来的venv/lib/python3.5/site-packages就会包含系统里所有的Python3.5包了。
如果你不想重新创建环境:手动添加系统包路径
要是你已经在现有环境里装了不少依赖,不想重头再来,可以试试这个方法,但要注意可能存在版本冲突的风险:
- 先找到系统Python3.5的site-packages路径,Mac上一般是:
也可以通过Python命令确认准确路径:/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packagesimport site print(site.getsitepackages()) - 进入虚拟环境的site-packages目录:
cd venv/lib/python3.5/site-packages - 创建一个新的
.pth文件(比如命名为system-packages.pth),把刚才找到的系统site-packages路径写进去并保存。
这样虚拟环境的Python解释器在导入包时会优先扫描这个路径,间接实现继承系统包的效果。不过这种方式可能导致系统包和虚拟环境内的包版本冲突,所以还是更推荐第一种重新创建环境的方式。
内容的提问来源于stack exchange,提问作者sof-03
相关产品推荐
相关产品推荐

