我已经使用设置了一个 python 虚拟环境
$ virtualenv --system-site-packages env
它在我设置虚拟环境的计算机上运行良好,并且可以访问脚本中的所有全局包。
然后,我按照以下步骤将此虚拟环境复制到另一台计算机 -
- 使虚拟环境在我的本地计算机上可重定位
$ virtualenv --relocatable env
- 将
env
文件夹复制到远程计算机。 - 修改
env/bin/activate
脚本以更改远程计算机上的VIRTUAL_ENV
路径
有了这个我就可以很好地访问我所有的本地软件包。但由于某种原因它无法访问系统级包。我尝试使用的系统级包是 psycopg2。
但是,在远程计算机上执行如下操作可以让我访问 psycopg2 模块
$ ln -s /usr/lib64/python2.7/dist-packages/psycopg2 $virtual_env/lib/python2.7/site-packages
或
$ cp -R /usr/lib64/python2.7/dist-packages/psycopg2 $virtual_env/lib/python2.7/site-packages
有什么方法可以让我在不进行黑客攻击的情况下使其正常工作吗?
--system-site-packages
选项如何工作?
据我所知 --system-site-packages 选项不会将系统级包硬拷贝到虚拟 env
中。
那么它是否在脚本中设置了某种路径变量,我可以更改它并使其正常工作?
最佳答案
您不是复制 virtualenv,而是重新创建它们。它们根本不能跨机器移植,默认情况下也不能跨文件夹移植(除非您指定 --relocatable
)。
pip freeze
为您提供已安装软件包的列表,将该列表保存到文件中(通常称为 requirements.txt
),将其复制到新计算机,创建virtualenv,激活它并运行 pip install -rrequirements.txt
此外,使用 --system-site-packages
并不是一个好主意。除非您的计算机上无法安装编译器,否则只需安装 postgres 开发 header (postgresql-dev 或类似的包),然后在您的 virtualenv 中安装 pip install psycopg2
即可。
关于python - 如何将访问全局包的python虚拟环境复制到另一台机器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36182558/