设置Python 3.7虚拟环境的问题

4

我正在尝试在运行Windows 8的本地计算机上创建一个新的Python 3.7虚拟环境。我已经安装了Python 3.6、3.7和3.8版本。它们的exe文件分别命名为python36、python37和python。它们都已正确添加到PATH环境变量中,因为我可以进入每个解释器。

在我的新项目目录中,我尝试使用命令python37 -m venv env创建虚拟环境。它报错:Error: [WinError 2] The system cannot find the file specified,但仍然创建了该目录。但Scripts子文件夹是空的,除了pythonw.exe

这个问题中,有人建议使用命令python37 -m venv env --without-pip。当我尝试这样做时,虚拟环境会使用Python 3.8,但它确实创建了激活/取消激活脚本。

我的理解是,venv将使用您用于调用它的Python exe创建虚拟环境,因此我不明白为什么会出现这种情况。我已经验证了python37指向正确的位置,可以使用where python37命令,甚至可以进入3.7交互式解释器。


2个回答

1
问题在于我重命名了Python exe文件。我不知道具体出了什么问题,但是可能在某个时候venv尝试查找python.exe并且被名称搞糊涂了。
将它们改回python.exe,并通过其位置区分版本解决了问题。
编辑: 查看Eryk的评论以获取更多详细信息。

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

-1

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

pip install virtualenv

然后创建您的虚拟环境。

mkvirtualenv myvirtualenv

然后在Windows中使用以下命令来激活虚拟环境。

myvirtualenv\Scripts\activate

在此之后,您可以在当前虚拟环境中安装相关的软件包。

使用Python标准库创建虚拟环境


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接