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

时间:2020-01-23 19:25:21

标签: python python-3.6 python-3.7 python-venv virtual-environment

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

python3 -m venv <dir-name>

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

此人似乎有相同的问题: Python venv not creating virtual environment

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

有人知道如何用venv解决此问题吗?我已经尝试了python 3.6和3.7

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

Edit2 :我被要求发布以下命令输出的屏幕截图。如您所见,仅使用“ 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或将python添加到PATH变量中时,显然在CMD中键入“ python”会打开Microsoft存储并在python.exe中创建一个C:\Users\GSI\AppData\Local\Microsoft\WindowsApps文件。我猜我是在初次安装python时但在添加PATH变量之前尝试执行python代码。

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

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

似乎没有选择我的PATH值。我尝试重新启动计算机,但是没有运气

2 个答案:

答案 0 :(得分:1)

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

示例:

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 “python” on Windows 10 (version 1903) command prompt opens Microsoft store(提到@ Update,@ TusharGautam,@ MattJecha,@ Ramhound很好的答案,其中包含有用的信息和资源)。

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

在下图中,我选择了2个框式项目作为示例:

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 store page

因此,您可以找到 python3 实际上不是 python3 (当然,它适用于 python 好)。有趣的是,在您的情况下,它“起作用”,而在我看来,它抱怨( ERROR_ACCESS_DENIED )。

结论

  • 我必须坚持始终使用完整路径。这样,您就不会受到 OS 中发生的更改的影响(嗯,您的文件可能会被删除或损坏,但随后会有更大的问题)
  • 每次指定完整路径都会很快变得很烦人,这就是为什么可以/应该使用 PATH 环境变量的原因。当然,在 90 %% 的情况下,这可以很好地工作(并显着改善体验),但是有些情况(例如,当其他已安装的 app s /工具时)还附带了 Python 的代码,将其 dir 添加到 PATH 中),可以触发有趣的结果

答案 1 :(得分:1)

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

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