Это должно работать, я тестировал его несколько раз ( например, : [SO]: PyWin32 (226) и виртуальные среды ).
И да, это 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 созданные) виртуальную среду.
Update # 0
Я взглянул на URL , добавленный в вопросе: [SuperUser]: введите «python» на Windows 10 ( версия 1903) из командной строки открывается магазин Microsoft (с упоминанием @Update, @TusharGautam, @MattJecha, @Ramhound отличных ответов, содержащих полезную информацию и ресурсы).
Видимо, это из-за 2 Установщик приложений связанные элементы из Псевдонимы выполнения приложений . Затем я пошел дальше, а также установил Python 3.7 из Microsoft Store .
Оба ( Установщик приложений и Python 3.7 ) размещают некоторые элементы (включая исполняемые файлы) в "% USERPROFILE% \ AppData \ Local \ Microsoft \" WindowsApps ». Самое смешное, что они имеют размер 0 байт и не являются ни ярлыками, ни символическими ссылками . Я склонен думать, что они на самом деле не существуют в файловой системе, но это своего рода «фиктивные записи», которые Win отображает и действует так, как если бы они были реальными (то же самое MS сделал при отображении . NET сборок (которые по сути являются .dll файлами) в виде каталогов в Windows Explorer ).
На изображении ниже я выбрал 2 элемента в штучной упаковке в качестве примеров:
При проверке одного другой автоматически отключается, что имеет смысл как оба указывают на один и тот же "исполняемый файл" (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]: Кто поставил Python в Windows 10 мая 2019 года обновления? ( выделение мое):
Хотя Python продолжает оставаться полностью независимым от операционной системы, каждая установка Windows будет включать python
и python3
команды, которые ведут вас прямо на страницу магазина Python .
Итак, вы go, python3 на самом деле python3 (конечно, относится и к python). Самое смешное, что в вашем случае это «сработало», а в моем случае оно жаловалось ( ERROR_ACCESS_DENIED ).
Выводы :
- Я должен настаивать на , всегда используя полные пути . Таким образом, на вас не влияют изменения, происходящие в OS (ну, ваши файлы могут быть удалены или повреждены, но тогда у вас будут большие проблемы)
- Каждый раз указывая полный путь , скоро станет очень раздражающим, поэтому можно / нужно использовать переменную окружения PATH . Конечно, это работает нормально (и значительно улучшает восприятие), вероятно, в 90 +% случаев, но есть некоторые (например, когда установлено другое app s / tools, которые также корабль Python, добавьте их dir s в PATH ), где он может вызвать забавные результаты