python - 如何将 Python virtualenv 移动到不同的系统(计算机)并使用站点包中存在的包

标签 python python-3.x operating-system virtualenv site-packages

我正在制作一个 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 中的不同系统后,如何使用“site-packages”内的包。

最佳答案

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

  • 由于许多二进制文件和库都是符号链接(symbolic link),并且链接到旧系统二进制文件和库,因此它无法在其他计算机上运行。
  • 由于 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% 确定它是否能正常工作,所以如果你想尝试一下。

  • your-old-virtualenv/lib/python{version}/ 中的 site-packages 复制到新计算机(例如桌面)的某个位置
  • 删除旧的 virtualenv,并创建新的 virtualenv
  • new-virtualenv/lib/python{version} 中的 new virtualenv 中的 site-packages 替换为旧版本 站点包
  • 删除新复制的site-packages中的__pycache__文件夹
  • 激活新的 virtualenv 并测试一切是否正常。

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

关于python - 如何将 Python virtualenv 移动到不同的系统(计算机)并使用站点包中存在的包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59460798/

相关文章:

python - 使用 waitKey 时为 "Attempt to unlock mutex that was not locked Aborted"

python - 在 openpyxl 中,如何移动或复制带有格式、合并单元格、公式和超链接的单元格范围

python - 有没有办法用 Pillow 仅反转特定像素?

python - 从 "graph"(数据库)数据递归创建字典

python - python和oracle处理异常握手的正确方法

python - Pandas:如何删除重复行,但保留所有行的最大值

c - 矩阵中的多线程搜索,行索引未正确显示

java - System.getProperty ("os.name")返回...(3个点)windows 8 java 7

linux - 是否存在与可执行文件无关的UNIX/Linux进程

python - QtGui.QPushButton.clicked[bool] 和 QtGui.QPushButton.clicked 之间的区别