2

我已经使用

$ virtualenv --system-site-packages env

它在我设置了虚拟环境的机器上运行良好,我可以访问脚本中的所有全局包。

然后我按照以下步骤将此虚拟环境复制到另一台机器 -

  1. 使虚拟环境可在我的本地计算机上重定位$ virtualenv --relocatable env
  2. 将文件夹复制env到远程计算机。
  3. 修改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. 那么它是否在脚本中设置了某种路径变量,我可以更改并使其正常工作?

4

1 回答 1

4

您不复制 virtualenvs,而是重新创建它们。它们根本不能跨机器移植,默认情况下也不能跨文件夹移植(除非您指定--relocatable)。

pip freeze为您提供已安装软件包的列表,将该列表保存到文件中(通常称为requirements.txt),将其复制到新机器,创建 virtualenv,激活它并运行pip install -r requirements.txt


此外,使用--system-site-packages很少是一个好主意。除非你的机器上没有编译器,否则只需安装 postgres 开发头文件(postgresql-dev 或类似的包),然后pip install psycopg2在你的 virtualenv 中。

于 2016-03-23T15:42:06.347 回答