Python3 .7 venv не создает каталог виртуальной среды - PullRequest
2 голосов
/ 23 января 2020

Я пытаюсь создать виртуальную среду в windows, используя:

python3 -m venv <dir-name>

Когда я проверяю содержимое текущего каталога в cmd после выполнения вышеуказанной команды, Я не вижу директории venv. Команда не выдает никаких ошибок.

У этого человека, похоже, возникла та же проблема: Python venv не создает виртуальную среду

Но принятый ответ был переустановить python, который не работал для меня. Другие ответы предлагают вместо этого установить virtualenv, но, насколько мне известно, он отличается от venv, что рекомендуется для python3 .3 +

Кто-нибудь знает, как решить эту проблему с помощью venv? Я пробовал python 3.6 и 3.7

Редактировать: Проблема, похоже, заключается в том, что местоположение python .exe, заданное в PATH, не используется. Вместо этого он использует: 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" в CMD, когда у вас нет python установленного / добавленного к переменной PATH, открывается Microsoft store и создает файл python.exe в C:\Users\GSI\AppData\Local\Microsoft\WindowsApps. Я предполагаю, что пытался выполнить код python, когда я впервые установил python, но прежде чем я добавил переменную PATH.

Я следовал инструкциям в посте, чтобы удалить «Псевдонимы выполнения приложений» для python .exe и python3 .exe. Это избавило от exe-файлов в WindowsApps (я не смог удалить их вручную).

Однако теперь, когда я набираю where python3 в CMD, я получаю: INFO: Could not find files for the given pattern(s).

Кажется, что он не собирает мои значения PATH. Я попытался перезагрузить компьютер, но безуспешно

1 Ответ

1 голос
/ 23 января 2020

Это должно работать, я тестировал его несколько раз ( например, : [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 элемента в штучной упаковке в качестве примеров:

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]: Кто поставил 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 ), где он может вызвать забавные результаты
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...