关于python:Python3.7 venv不创建虚拟环境目录

Python3.7 venv does not Create Virtual Environment Directory

我正在尝试在 windows 中创建一个虚拟环境:

python3 -m venv <dir-name>

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

这个人似乎也有同样的问题:
Python venv 未创建虚拟环境

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

的 venv 不同

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

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

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

enterC:\\Users\\GSI\\AppData\\Local\\Microsoft\\WindowsApps中创建一个python.exe文件。我猜我在第一次安装 python 时尝试执行 python 代码,但在添加 PATH 变量之前。

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

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

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


确保您处于管理员模式(Windows X 按钮 > PowerShell(Admin) > 单击是);
这应该带你到

1
PS C:\\WINDOWS\\system32>

移至您安装 Python 的位置。然后输入以下内容:

1
python -m venv C:\\<your-existing-project-directory>\\<venv-name-u-want-to-use>

VENV 将在 C:\\\\

中创建一个目录

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


它应该可以工作,我对其进行了多次测试(例如:[SO]: PyWin32 (226) 和虚拟环境)。是的,它们是两种不同的动物:

  • [Python 3.Docs]: venv - 创建虚拟环境
  • [PyPA.VirtualEnv]:Virtualenv。

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
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

    • 也可能将其应用于环境目录
  • 将路径括在 dblquotes ("${SOME_PATH}") 中,因为它们可能包含空格(并且命令解释器会将 SPACE 后面的部分解释为前面那个的参数)
  • 检查命令返回码
  • 检查可能影响行为的环境变量(例如:PYTHONPATH)
  • 当然,Python应该是有效的(安装过程中没有遇到错误,之后没有删除/修改文件,......)

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

更新 #0

我查看了问题中添加的 URL:[SuperUser]: Typing a€?pythona€?在 Windows 10(版本 1903)命令提示符下打开 Microsoft 商店(提到 @Update、@TusharGautam、@MattJecha、@Ramhound 很好的答案,包含有用的信息和资源)。

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

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

Img0

当检查一个时,另一个会自动取消选中,这是有道理的,因为两者都指向同一个"可执行文件"(python3.exe)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
[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:}\
EXE: {1:}\
CWD: {2:}\
PyPATH: {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:}\
EXE: {1:}\
CWD: {2:}\
PyPATH: {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]:谁将 Python 放入 2019 年 5 月 10 日的 Windows 更新中? (重点是我的):

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)。有趣的是,在你的情况下它"有效",而在我的情况下它抱怨(ERROR_ACCESS_DENIED)。

结论:

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