Python3.7 venv无法创建虚拟环境目录

5

我正在尝试在Windows中创建虚拟环境,使用命令:

python3 -m venv <dir-name>

运行上述命令后,在CMD中检查当前目录的内容时,我没有看到venv目录显示出来。该命令没有抛出任何错误。

这个人似乎遇到了同样的问题: Python venv not creating virtual environment

但被接受的答案是重新安装Python,但这对我没有起作用。其他答案建议安装virtualenv而不是venv,但据我所知,venv是推荐用于Python3.3+的,它与virtualenv是不同的。

有人知道如何解决venv的这个问题吗?我已经尝试过Python 3.6和3.7

编辑: 问题似乎是PATH中设置的python.exe位置没有被使用。它实际上使用的是:C:\Users\GSI\AppData\Local\Microsoft\WindowsApps\python3.exe。我不确定如何修复我的环境变量。需要重新启动吗?我有很多东西正在运行,但如果必要的话,我可以重新启动。

编辑2: 我被要求发布以下命令的输出截图。如您所见,当我只使用“python3”运行它们时,没有输出。当我使用exe安装路径的完整路径运行命令时,我确实会得到输出:

enter image description here

编辑3: 我在这里找到了一篇有用的帖子: https://superuser.com/questions/1437590/typing-python-on-windows-10-version-1903-command-prompt-opens-microsoft-stor

显然,当您尚未安装/将Python添加到PATH变量中时,在CMD中键入“python”会打开Microsoft Store并在C:\Users\GSI\AppData\Local\Microsoft\WindowsApps中创建一个python.exe文件。我猜我是在安装Python之前但在添加PATH变量之前尝试执行Python代码的。

我按照帖子中的说明删除了python.exe和python3.exe的“应用程序执行别名”。这样就可以摆脱WindowsApps中的exe文件了(我无法手动删除它们)。

然而,现在当我在CMD中键入where python3时,我得到以下信息: INFO: Could not find files for the given pattern(s).

看起来它没有捕捉到我的PATH值。我尝试重新启动计算机,但没有运气。


我喜欢使用Windows子系统来运行Linux。作为最后的选择,你可以试一下。 - shanecandoit
你试过打出完整路径吗?例如 python3 -m venv c:\path\to\myenv - Alex W
你正在使用什么<dir-name>? - Toni Sredanović
你尝试过使用 virtualenv <envname> -p python3 吗?可能需要先执行 pip install virtualenv - rouhija
2个回答

2

确保您处于管理员模式下(Windows+X键 > PowerShell(管理员) > 点击是);这应该会带您到

PS C:\WINDOWS\system32>

移动到您安装Python的位置。然后输入以下内容:
python -m venv C:\<your-existing-project-directory>\<venv-name-u-want-to-use>

VENV将在C:\内创建一个目录。

更多信息请参见:https://docs.python.org/3/library/venv.html


1

它应该可以工作,我测试了多次(例如:[SO]: PyWin32 (226) and virtual environments)。
是的,它们是两种不同类型的动物:

示例:

e:\Work\Dev\StackOverflow\q059885771>sopr.bat
*** Set shorter prompt to better fit when pasted in StackOverflow (or other) pages ***

[prompt]> set PY
PYTHONPATH=e:\Work\Dev\Utils\current

[prompt]> dir /b

[prompt]> "c:\Install\pc064\Python\Python\03.07.06\python.exe" -c "import sys, venv;print(sys.version);print(venv)"
3.7.6 (tags/v3.7.6:43364a7ae0, Dec 19 2019, 00:42:30) [MSC v.1916 64 bit (AMD64)]
<module 'venv' from 'c:\\Install\\pc064\\Python\\Python\\03.07.06\\lib\\venv\\__init__.py'>

[prompt]> "c:\Install\pc064\Python\Python\03.07.06\python.exe" -m venv
usage: venv [-h] [--system-site-packages] [--symlinks | --copies] [--clear]
            [--upgrade] [--without-pip] [--prompt PROMPT]
            ENV_DIR [ENV_DIR ...]
venv: error: the following arguments are required: ENV_DIR

[prompt]> time<nul
The current time is: 21:51:57.12
Enter the new time:
[prompt]> "c:\Install\pc064\Python\Python\03.07.06\python.exe" -m venv ".\venv_dir"

[prompt]> echo %errorlevel%
0

[prompt]> time<nul
The current time is: 21:52:10.54
Enter the new time:
[prompt]>
[prompt]> dir /b
venv_dir

[prompt]> "venv_dir\Scripts\python.exe"
Python 3.7.6 (tags/v3.7.6:43364a7ae0, Dec 19 2019, 00:42:30) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> ^Z


[prompt]>

注意事项:

  • 确保事物确实是您认为的那样: 使用完整路径 (就像我对Python可执行文件所做的那样)。要查看在您的情况下调用哪个解释器,请在控制台中键入where python3
    • 可能还适用于环境目录
  • 将路径括在"${SOME_PATH}"中,因为它们可能包含空格(命令解释器将把空格后面的部分解释为前面一个参数)
  • 检查命令返回代码
  • 检查可能影响行为的环境变量(例如: PYTHONPATH)
  • 当然,Python应该是有效的(安装期间没有遇到错误,在此之后没有删除/修改文件等)

当所有上述检查通过后,您应该能够创建和使用一个(venv 创建的)虚拟环境。

更新#0

我查看了问题中添加的URL[SuperUser]:在Windows 10(版本1903)命令提示符上键入“python”会打开Microsoft商店(提到@Update,@TusharGautam,@MattJecha,@Ramhound的优秀答案,包含有用的信息和资源)。

显然,这是因为与“应用程序执行别名”相关的 2 个应用程序安装程序有关。然后,我更进一步,还从Microsoft Store安装了Python 3.7
两个程序(应用程序安装程序Python 3.7)都将一些项(包括可执行文件)放置在“%USERPROFILE%\AppData\Local\Microsoft\WindowsApps”中。有趣的事情是它们大小为 0 字节,它们既不是快捷方式也不是符号链接。我倾向于认为它们实际上不存在于文件系统中,而是某种“模拟条目”,Win 显示并表现得好像它们是真实存在的(当显示 .NET 组件(基本上是 .dll 文件)作为Windows Explorer 中的目录时,MS 所做的也是同样的事情)。

在下面的图片中,我选择了其中的两个框中的项目作为示例:

Img0

当选中一个时,另一个会自动取消选择,这很合理,因为两者都指向同一个“可执行文件”(python3.exe)。
[prompt]> :: Python3.7 (python3.exe - installed from Microsoft Store) checked
[prompt]> dir "c:\Users\cfati\AppData\Local\Microsoft\WindowsApps\py*"
 Volume in drive C is SSD0-WIN
 Volume Serial Number is F2CE-FA29

 Directory of c:\Users\cfati\AppData\Local\Microsoft\WindowsApps

20/01/24  12:32                 0 python3.exe
20/01/24  12:12    <DIR>          PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0
               1 File(s)              0 bytes
               1 Dir(s)  197,737,488,384 bytes free

[prompt]> python3 -c "import sys, os;print(\"VER: {0:}\nEXE: {1:}\nCWD: {2:}\nPyPATH: {3:}\".format(sys.version, sys.executable, os.getcwd(), sys.path))"
VER: 3.7.6 (tags/v3.7.6:43364a7ae0, Dec 19 2019, 01:54:44) [MSC v.1916 64 bit (AMD64)]
EXE: C:\Users\cfati\AppData\Local\Microsoft\WindowsApps\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\python.exe
CWD: e:\Work\Dev\StackOverflow\q059885771
PyPATH: ['', 'e:\\Work\\Dev\\Utils\\current', 'C:\\Program Files\\WindowsApps\\PythonSoftwareFoundation.Python.3.7_3.7.1776.0_x64__qbz5n2kfra8p0\\python37.zip', 'C:\\Program Files\\WindowsApps\\PythonSoftwareFoundation.Python.3.7_3.7.1776.0_x64__qbz5n2kfra8p0\\DLLs', 'C:\\Program Files\\WindowsApps\\PythonSoftwareFoundation.Python.3.7_3.7.1776.0_x64__qbz5n2kfra8p0\\lib', 'C:\\Program Files\\WindowsApps\\PythonSoftwareFoundation.Python.3.7_3.7.1776.0_x64__qbz5n2kfra8p0', 'C:\\Program Files\\WindowsApps\\PythonSoftwareFoundation.Python.3.7_3.7.1776.0_x64__qbz5n2kfra8p0\\lib\\site-packages']

[prompt]> echo %errorlevel%
0

[prompt]>
[prompt]> :: App Installer (python3.exe) checked
[prompt]> dir "c:\Users\cfati\AppData\Local\Microsoft\WindowsApps\py*"
 Volume in drive C is SSD0-WIN
 Volume Serial Number is F2CE-FA29

 Directory of c:\Users\cfati\AppData\Local\Microsoft\WindowsApps

20/01/24  12:35                 0 python3.exe
20/01/24  12:12    <DIR>          PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0
               1 File(s)              0 bytes
               1 Dir(s)  197,737,291,776 bytes free

[prompt]> python3 -c "import sys, os;print(\"VER: {0:}\nEXE: {1:}\nCWD: {2:}\nPyPATH: {3:}\".format(sys.version, sys.executable, os.getcwd(), sys.path))"
Access is denied.

[prompt]> :: !!! "This app can't run on your PC" popped up !!!
[prompt]> echo %errorlevel%
5
作为注意事项,可执行文件(“C:\Users\cfati\AppData\Local\Microsoft\WindowsApps\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\python.exe”)也是一个“模拟条目”,真正的文件实际上位于“%ProgramFiles%\WindowsApps”。
来自[MS.DevBlogs]: Who put Python in the Windows 10 May 2019 Update?重点是我的):

虽然 Python 仍然完全独立于操作系统,但每个 Windows 安装都会包括 pythonpython3 命令,可以直接转到Python 商店页面

所以,你知道了,python3实际上并不是真正的python3(当然,也适用于python)。有趣的是,在你的情况下它“工作”了,而在我的情况下它报错了(ERROR_ACCESS_DENIED)。

结论:

  • 我必须坚持始终使用完整路径。这样,您就不会受到操作系统发生更改的影响(好吧,您的文件可能会被删除或损坏,但那时您将面临更大的问题)
  • 每次指定完整路径很快就会变得非常烦人,这就是为什么应该/可以使用PATH环境变量的原因。当然,这在可能的情况下(约90+%)运行良好,并显著提高了体验,但在某些情况下(例如其他安装的应用程序/工具也提供了Python,并将其目录添加到PATH中),它可能会触发有趣的结果

使用python.exe的完整路径对我有用 - 感谢您的帮助!这很奇怪,因为我已经在我的PATH环境变量中设置了路径。我还尝试使用PYTHONPATH变量进行测试 - 没有任何区别。而且在运行命令时没有出现任何错误。但现在它可以工作了,非常感谢! - user2437443
你可能想在控制台中输入 where python3(我修改了第一个项目符号)。然后输入 python3 -c "import sys, venv;print(sys.version);print(venv)" 并将输出结果发布出来(可以包含在问题中)。 - CristiFati
对于 where python3 命令,我得到的输出是:C:\Users\<user>\AppData\Local\Microsoft\WindowsApps\python3.exe。这可能解释了为什么我需要完整的可执行文件路径,因为它不在我的 PATH 环境变量中。对于第二个命令,我没有得到任何输出。 - user2437443
它不在你的路径中也没关系,Windows 找到了它并调用了它。创建环境需要多长时间?你是怎么在那个位置安装 Python 的?难道你没有从 www.python.org 下载安装程序吗?另外,python3 -c "import os;print(os.cwd())" 输出什么?也许控制台的截图会有所帮助。 - CristiFati
我已经发布了一些控制台输出的截图。 当我尝试使用 python3 -m venv <dir> 时,它是瞬间完成的,没有结果。当我尝试使用实际安装Python exe的完整路径时,大约需要2秒钟,并且成功创建了venv目录。 我确实从python.org下载了安装程序。它安装在 C:\Users\GSI\AppData\Local\Programs\Python\Python36 中,这也是我的PATH设置的位置,但由于某种原因,它想要使用我上面发布的“WindowsApps”位置中的exe。我不确定exe在那个位置做了什么。 - user2437443
在“WindowsApps”位置有两个文件:python.exe和python3.exe。当我尝试删除它们时,会出现“系统无法访问该文件”的错误。 - user2437443

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