1

我正在制作一个python 3应用程序(基于flask),为此我在我的开发系统中创建了一个virtualenv,通过pip安装了所有包,我的应用程序运行良好。

但是,当我将该 virtualenv 移动到另一个系统(安装了 python3)并使用我的 virtualenv python 的绝对路径(c:/......./myenv/Scripts/python.exe main.py)运行我的应用程序时它抛出了未安装软件包的错误,我激活了 virtualenv 并使用了 pip freeze 并且没有安装任何软件包。

但是在 virtualenv 下有 'Site-Packages' (myenv -> lib -> site-packages) ,我所有安装的包都在那里。

我的问题是即使在将 virtualenv 移动到 Python 3 中的不同系统之后,如何使用“站点包”中的包。

4

3 回答 3

3

将 virtualenv 从一台计算机移动到另一台,甚至在同一台计算机上从一个位置移动到另一个位置是一个坏主意,这就是为什么:

  • 由于许多二进制文件和库都是符号链接,并且链接到您的旧系统二进制文件和库,因此它无法在其他机器上运行。
  • 由于您的 virtualenv 中的许多bin/脚本都依赖于系统上的 virtualenv path因此如果您将 virtualenv 移动到另一个位置(即使在同一系统上也是如此),它将无法工作。

所以推荐的方法是:

  • 首先生成 requirements.txt 文件:

     pip freeze > requirements.txt
    
  • 其次,在移动所有内容(除了 virtualenv 目录)后,创建一个新的 virtualenv,激活它并运行:

     pip install -r requirements.txt
    

最后在你的情况下,如果你真的没有生成 requirements.txt 文件,并且需要使用旧的site-packages,有一个肮脏的解决方法,我在 gnu/linux 机器上尝试过一次并且以某种方式工作,但我不能 100% 确定它是否会正常工作,所以如果你想试试看。

  • 将文件复制到新计算机site-packagesyour-old-virtualenv/lib/python{version}/某处,例如桌面
  • 删除旧的virtualenv,并创建一个新的virtualenv
  • 用旧site-packages的替换新 virtualenvnew-virtualenv/lib/python{version} site-packages
  • 删除__pycache__新复制的文件夹site-packages
  • 激活新的 virtualenv 并测试是否一切正常。

请注意,您应该使用相同的 python 版本 2 或 3 ,不要期望依赖于 python2 的 virtualenv 可以与 python3 一起正常运行

于 2019-12-23T21:26:51.637 回答
0

也许您可以考虑使用pipenv来控制不同计算机或环境上的 virtualenvs。

于 2019-12-24T13:28:38.533 回答
0

即使在同一个系统中,您也不能复制和粘贴 venv。
如果您在venv-copied中安装新软件包,那么它将安装在venv-original中。
因为设置绑定到特定目录。

于 2021-09-01T03:44:25.970 回答