python - 如何将访问全局包的python虚拟环境复制到另一台机器

标签 python virtualenv virtual-environment

我已经使用设置了一个 python 虚拟环境

$ 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 中。 那么它是否在脚本中设置了某种路径变量,我可以更改它并使其正常工作?

最佳答案

您不是复制 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/

相关文章:

python - 如何在ANN中再添加一层隐藏层?并且精度低

python - 从 MongoDB 到 PostgreSQL - Django

python - 在 UnicodeError 上显示字符串

python - 使用 pyenv 安装 Python 3.10.5

django - 如何在 Django 中使用 .env?

python - 检测缩短的目的地,或 "tiny"url

python - 如何使用 pip 从 github 安装 egg 文件而不是在当前目录中,而是在 conda env 目录中?

centos - python virtualenvwrapper 类型错误 : __init__() got an unexpected keyword argument 'stream'

python - mkvirtualenv 给出权限被拒绝错误

python - 设置 python 3.7 虚拟环境时出现问题