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

Python3.7 venv does not Create Virtual Environment Directory

我正在尝试在 windows 中使用以下方法创建虚拟环境:

python3 -m venv <dir-name>

当我在 运行 执行上述命令后在 cmd 中检查当前目录的内容时,我没有看到 venv 目录出现。该命令不会引发任何错误。

这个人好像遇到过同样的问题:

但公认的答案是重新安装 python,这对我不起作用。其他答案建议改为安装 virtualenv,但据我所知,这与 venv 不同,推荐用于 python3.3+

有谁知道如何用 venv 解决这个问题?我试过 python 3.6 和 3.7

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

Edit2: 我被要求 post 以下命令输出的屏幕截图。如您所见,当我 运行 它们只用 "python3" 时没有输出。当我 运行 带有安装 exe 的完整路径的命令时,我确实得到了输出:

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

当你没有 python installed/added 到 PATH 变量时,显然在 CMD 中输入 "python" 打开 Microsoft 商店并在 python.exe 中创建一个文件 C:\Users\GSI\AppData\Local\Microsoft\WindowsApps。我猜我在第一次安装 python 时尝试执行 python 代码,但在我添加 PATH 变量之前。

我按照 post 中的说明删除了 python.exe 和 python3.exe 的 "Application Execution Aliases"。这摆脱了 WindowsApps 中的 exe 文件(我无法手动删除它们)。

但是,现在当我在 CMD 中输入 where python3 时,我得到: INFO: Could not find files for the given pattern(s).

它似乎没有获取我的 PATH 值。我尝试重新启动计算机但没有成功

应该可以,我测试了几次(例如)。
是的,它们是 2 不同 种动物:

示例:

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

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

[prompt]> dir /b

[prompt]> "c:\Install\pc064\Python\Python.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.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.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
    • 也可以将其应用于环境目录
  • dblquotes 中包含路径 ("${SOME_PATH}" ),因为它们可能包含空格(并且命令解释器会将 SPACE 之后的部分解释为之前部分的参数)
  • 查看命令return代码
  • 检查可能影响行为的环境变量(例如PYTHONPATH
  • 当然,Python应该有效(安装过程中没有遇到错误,之后没有删除/修改文件,...)

通过上述所有检查后,您应该可以创建和使用(venv 已创建)虚拟环境。

更新 #0

我看了一下问题中添加的URL[SuperUser]: Typing “python” on Windows 10 (version 1903) command prompt opens Microsoft store(提到@Update,@TusharGautam,@MattJecha,@Ramhound 很棒答案,包含有用的信息和资源)。

显然,这是因为 App Installer 相关项目来自 App 执行别名。然后我更进一步,还从 Microsoft Store 安装了 Python 3.7
两者(App InstallerPython 3.7)将一些项目(包括可执行文件)放在“%USERPROFILE%\AppData\Local\Microsoft\WindowsApps”。有趣的是,它们的大小是 0 字节,而且它们既不是快捷方式也不是 符号链接。我倾向于认为它们实际上并不存在于文件系统中,而是 Win 显示的某种 "mock entries" 并且表现得好像它们是真实的(同样的东西 MS 在显示 .NET 程序集 (基本上是 .dll 文件)作为 Windows 资源管理器).

在下图中,我选择了2个盒装物品作为示例:

选中一个时,另一个会自动取消选中,这是有道理的,因为两者都指向相同的 "executable" (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\Whosebug\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 ")也是一个"mock entry",真正的其实位于"%ProgramFiles%\WindowsApps"

来自[MS.DevBlogs]: Who put Python in the Windows 10 May 2019 Update?重点是我的):

While Python continues to remain completely independent from the operating system, every install of Windows will include python and python3 commands that take you directly to the Python store page.

所以,你看,python3 实际上不是 python3(当然,也适用于 python)。有趣的是,在你的情况下它 "worked",而在我的情况下它抱怨 (ERROR_ACCESS_DENIED).

结论:

  • 我必须坚持始终使用完整路径。这样你就不会受到 OS 中发生的变化的影响(好吧,你的文件可能会被删除或损坏,但你会遇到更大的问题)
  • 每次都指定完整路径,很快就会变得很烦人,这就是为什么可以/应该使用 PATH 环境变量的原因。当然,这在可能 90+% 的情况下效果很好(并且显着改善了体验),但也有一些(例如当其他安装 apps / tools that also shipped Python,将它们的 dirs 添加到 PATH) 它可以触发有趣的结果

确保您处于管理员模式(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