Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我使用virtualenv是错误的还是它的局限性?_Python_Virtualenv - Fatal编程技术网

Python 我使用virtualenv是错误的还是它的局限性?

Python 我使用virtualenv是错误的还是它的局限性?,python,virtualenv,Python,Virtualenv,因此,我使用virtualenv为我正在从事的许多项目定义了环境。我将virtualenvpython定义为3.4版。最终,我的全局python从3.4.0升级到了3.4.3。这证明是一个问题,因为virtualenv依赖于全局二进制文件(myvirtualenv中的/lib/python3.4的内容实际上只是指向全局二进制文件的链接),而这些文件并没有定义到它们的次要版本。换句话说,升级完成后,二进制文件夹/usr/lib/python3.4的内容被替换。这是因为python没有在3.4.0和

因此,我使用
virtualenv
为我正在从事的许多项目定义了环境。我将
virtualenv
python定义为3.4版。最终,我的全局python从3.4.0升级到了3.4.3。这证明是一个问题,因为
virtualenv
依赖于全局二进制文件(my
virtualenv
中的
/lib/python3.4
的内容实际上只是指向全局二进制文件的链接),而这些文件并没有定义到它们的次要版本。换句话说,升级完成后,二进制文件夹
/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安装的级别,但这感觉“脏”。如果一个项目运行3.4.0,另一个项目运行3.4.3会怎么样?如果任何3.4.x安装都只能存在一个二进制文件夹,那么没有办法让它们在同一台机器上并行工作吗

我试图了解我是否在这里遗漏了一些明显的东西,或者这是
virtualenv
的一个常见问题,因为我听到很多人抱怨在使用
virtualenv
时二进制文件出现问题


在未来,是否有必要告诉
virtualenvwrapper
复制二进制文件而不是链接到它们?

virtualenv不被设计为可移植的,无论是跨机器还是跨Python版本

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


Python 3.4.3的问题是与您的代码不兼容,还是只是virtualenv失败(重新创建virtualenv并重新安装其中的所有内容修复了它)?问题不在于我的代码。每当我尝试加载基本库时,即使只是在虚拟环境中加载python解释器也会失败。所以在我的代码细节进入画面之前,事情就出了问题。这实际上是关于使用错误的二进制文件运行可执行文件。如果您创建一个新的virtualenv并在其中运行Python 3.4.3会怎么样?“升级Python版本有时会破坏virtualenvs。”这回答了我的问题。我知道我可以用升级后的python分别重新创建每个virtualenv,但在我看来,这样做首先违背了使用virtualenv的全部目的。。。但是,如果升级python真的破坏了VirtualEnv,那么在我看来,这确实是它的一个严重限制。Virtualenvs的设计并不是为了能够跨机器或跨python版本进行移植。这是一个已知的缺点,但并不违背其目的。明白了。我认为这是因为它允许您指定使用哪个python版本,这意味着它应该能够处理python版本中的全局更改,同时保持本地静态更改。我想不会,这只是关于处理外部模块版本。谢谢你的帮助。顺便说一句,你能在你的回答中加上那句话吗?因为这是我要问的问题的核心。然后我可以接受答案。
# 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