设置Python3.7虚拟环境时出现的问题
我正在尝试在运行Windows8的本地计算机上创建一个新的Python3.7虚拟环境。我已经安装了python版本3.6、3.7和3.8。它们的exe分别命名为python36、python37和python。所有三个都正确地添加到路径中,因为我可以输入每个解释器 在我新项目的目录中,我尝试使用设置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 有人
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链接,然后将其粘贴到安装目录中。资源管理器应提示您获取管理员访问权限。