我使用 virtualenv 是错误的还是这是它的限制?

Am I using virtualenv wrong or is this a limitation of it?

所以我使用 virtualenv 为我正在进行的许多项目定义环境。我将 virtualenv python 定义为 3.4 版。最终,我的全局 python 从 3.4.0 升级到了 3.4.3。这被证明是一个问题,因为 virtualenv 依赖于全局二进制文件(我的 virtualenv/lib/python3.4 的内容实际上只是 links 到全局二进制文件),并且这些未定义到它们的次要版本。换句话说,升级完成后,二进制文件夹 /usr/lib/python3.4 的内容被替换了。这是因为 python 没有在 3.4.0 和 3.4.3 中单独安装东西,而是只安装到一个名为 /usr/lib/python3.4 的文件夹中。由于我的 virtualenv 中的 python 可执行文件是 3.4.0,显然与 3.4.3 二进制文件存在兼容性问题(它将无法加载 ctypes 这几乎阻止了任何事情 python 依赖于 运行)。我发现的唯一解决方法是降级我的全局 python 安装,但这感觉 "dirty"。如果我有一个项目 运行ning 3.4.0 和另一个 运行ning 3.4.3 怎么办?鉴于任何 3.4.x 安装只能存在一个二进制文件夹,有没有办法让它们在同一台机器上并行工作?

我想知道我是否遗漏了一些明显的东西,或者这是 virtualenv 的一个常见问题,因为我听说很多人在使用时抱怨二进制文件的问题virtualenv.

将来,有没有告诉 virtualenvwrapper 将二进制文件而不是 link 复制给它们的方法?

Virtualenvs 并未设计为可移植的,无论是跨机器还是跨 Python 个版本。

这意味着升级 Python 版本有时会破坏 virtualenvs。您需要重新创建它们并重新安装其中的所有内容(运行 在您的 virtualenv root 中):

# Save a list of what you had installed
pip freeze > freeze.txt

# Trash the entire virtualenv
deactivate
rm -rf lib/ bin/ share/ man/ include/ .Python pip-selfcheck.json

# Create it anew
virtualenv .

# Install all libraries you had before
pip install -r freeze.txt