安装在系统base Python中的库能否在virtualenv环境中使用?
关于Virtualenv与系统Python库的访问问题
嘿,我当初刚学Python的时候也跳过了virtualenv的内容,总觉得“我就写个小脚本哪用得着这个”,后来踩了坑才明白它的重要性,太懂你现在的处境了😂
先直接给你答案:
- 默认情况下,virtualenv是完全隔离系统base Python的库的。也就是说你在virtualenv环境里用
pip list,只能看到这个环境里安装的包,系统里用pip3 install装的那些是看不到的,也没法直接使用。这正是virtualenv的核心价值——为每个项目创建独立的依赖环境,避免不同项目之间的版本冲突。
如果你确实需要让virtualenv访问系统的包,有两种实现方式:
创建环境时指定参数:
用virtualenv创建环境的时候加上--system-site-packages参数,比如:virtualenv --system-site-packages my_project_env如果你用的是Python3.3+自带的venv模块,命令是:
python -m venv --system-site-packages my_project_env这样创建出来的环境就会包含系统base Python中所有已安装的库。
修改已创建的环境配置:
如果你已经创建了环境,想临时开启系统包访问,可以找到环境目录下的pyvenv.cfg文件(venv环境的话),把里面的include-system-site-packages = false改成include-system-site-packages = true,保存后重启环境就生效了。
不过这里要给你提个醒:不建议为了分发程序而这么做。因为你要把程序打包成Windows可执行文件,目标电脑的系统Python环境和你的完全不一样——可能没有你系统里的那些库,或者版本不兼容,这样打包出来的exe很可能在别人电脑上跑不起来。
更稳妥的做法是:
- 创建一个干净的virtualenv环境(不要加
--system-site-packages参数) - 只安装你的程序需要的依赖包(可以用
pip freeze > requirements.txt导出依赖,方便复用) - 用PyInstaller、cx_Freeze这类工具打包,这样工具会把你的代码和所有依赖的库一起打包进exe里,不管目标电脑有没有Python都能正常运行。
内容的提问来源于stack exchange,提问作者mac
相关产品推荐
相关产品推荐

