Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.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
设置Python3.7虚拟环境时出现的问题_Python_Windows_Python 3.7_Python Venv_Virtual Environment - Fatal编程技术网

设置Python3.7虚拟环境时出现的问题

设置Python3.7虚拟环境时出现的问题,python,windows,python-3.7,python-venv,virtual-environment,Python,Windows,Python 3.7,Python Venv,Virtual Environment,我正在尝试在运行Windows8的本地计算机上创建一个新的Python3.7虚拟环境。我已经安装了python版本3.6、3.7和3.8。它们的exe分别命名为python36、python37和python。所有三个都正确地添加到路径中,因为我可以输入每个解释器 在我新项目的目录中,我尝试使用python37-m venv env创建一个虚拟环境。它产生了一个错误:错误:[WinError 2]系统找不到指定的文件,但它仍然创建了目录。但是,脚本子文件夹是空的,除了pythonw.exe 有人

我正在尝试在运行Windows8的本地计算机上创建一个新的Python3.7虚拟环境。我已经安装了python版本3.6、3.7和3.8。它们的exe分别命名为python36、python37和python。所有三个都正确地添加到路径中,因为我可以输入每个解释器

在我新项目的目录中,我尝试使用
python37-m venv env
创建一个虚拟环境。它产生了一个错误:
错误:[WinError 2]系统找不到指定的文件
,但它仍然创建了目录。但是,脚本子文件夹是空的,除了
pythonw.exe

有人建议使用
python37-m-venv-env——而不使用pip
。当我尝试这样做时,已经创建了激活/停用脚本,但是虚拟环境使用的是python 3.8


据我所知,venv将使用您所使用的python exe来创建虚拟环境,因此我不明白这是如何实现的。我已经验证了
python37
指向了
python37
的正确位置,甚至可以进入3.7交互式解释器。

首先在任何驱动器上创建文件夹,然后转到该文件夹并使用pip安装virtualenv软件包

pip install virtualenv
然后创建您的虚拟环境

mkvirtualenv myvirtualenv
然后使用下面的命令在windows中激活virtualenv

myvirtualenv\Scripts\activate
之后,您可以在当前虚拟环境中安装相关软件包

mkvirtualenv myvirtualenv

问题是我重命名了python exe。我不知道到底出了什么问题,但大概在某个时候,
venv
试图找到
python.exe
,然后被名字抛弃了

将它们改回python.exe,并根据它们的位置区分不同的版本,解决了这个问题

编辑:
查看Eryk的评论以了解更多详细信息。

基本“python.exe”必须存在,才能从“\Lib\venv\scripts\nt”复制“python.exe”启动器。不幸的是,它是硬编码的。即使您保留原始的“python.exe”并使用硬链接或符号链接(例如“python37.exe”->“python.exe”),sys.executable的基本名称将是“python37.exe”,这会导致pip的安装失败,因为它试图在不存在的环境中运行“python37.exe”。原则上,如果Python像在Unix中一样在Windows中解析
sys.executable
,它将使用符号链接。我认为这是一个bug。作为一个解决方案,您可以在安装目录中创建一个“Python 37 .LNK”文件(shell快捷方式)旁边的“Python .exe”,它以完全限定的路径运行它。清除“start in”字段将其保留为空,以便继承运行shell链接的调用方的工作目录。将“.LNK”添加到系统环境变量中的
PATHEXT
,您就可以从CMD或PowerShell中的命令行运行
python37
。(可能使用名称“python3.7.lnk”,但这是Unix系统中的常用名称。)请注意,如果使用资源管理器创建shell链接,默认情况下它会隐藏.lnk扩展名,因此请确保只将其命名为“python37”或“python3.7”,而不使用扩展名。如果为系统目录中的所有用户安装了Python,请在桌面上创建shell链接,然后将其粘贴到安装目录中。资源管理器应提示您获取管理员访问权限。