Почему в Windows установлены две уникальные копии Python 3.7.0 в совершенно разных местах? - PullRequest
0 голосов
/ 21 сентября 2018

У меня установлен Python 3.7.0 в Windows.Я только следовал за установщиком один раз, но у меня есть два разных исполняемых файла python, установленных в двух разных местах:

C:\Windows\py.exe

с белым значком, 887 КБ (908 952 байта);и

C:\Users\myuser\AppData\Local\Programs\Python\Python37\python.exe

с черным значком, 97,6 КБ (99,992 байт)

Установщик Python указывает второй путь, как показано в руководстве по установке , но в GitBash, Cygwin и MSYS + MingW сообщают, что первый действительный, а не второй:

$ which python
which: python: unknown command

$ which py
/c/WINDOWS/py.exe

И PowerShell показывает, что оба они представляют собой Python 3.7.0, несмотря на разные размеры файлов:

PS C:\Users\myuser\AppData\Local\Programs\Python\Python37> ./python.exe -V
Python 3.7.0

PS C:\Users\myuser\AppData\Local\Programs\Python\Python37> py -V
Python 3.7.0

В первом пути нет подпапки «Сценарии», а во втором - папка, однако переменные системной среды указывают на папку «Сценарии» по пути, в котором нет папки «Сценарии»:

переменная PATH: %PYTHON_HOME%\ %PYTHON_HOME%\Scripts\

переменная PYTHON_HOME: C:\Windows\

Так где же "py.exe" хранит библиотеки?Почему они оба правильно запускают скрипты Python и имеют одинаковые результаты?И почему все-таки есть установка на C:\Windows\?Мне пришлось физически добавить второй в переменную PATH, чтобы иметь возможность использовать pip с терминала без ввода py -m pip, и я не хочу вводить длинную версию.

Ответы [ 2 ]

0 голосов
/ 21 сентября 2018

py.exe - это специальный модуль запуска Python для Windows .Он не связан напрямую с какой-либо конкретной версией Python, он просто устанавливается с любой версией Python 3.3 или новее и обеспечивает три основных преимущества:

  1. Установка в каталоге Windows гарантирует его постоянную установку.в вашем PATH (поэтому нет необходимости изменять PATH для каждого каталога установки Python)
  2. Позволяет легко выбирать разные версии Python;py -2 myscript.py запускает его с последней версией Python 2 в вашей системе, py -3 myscript.py с последней версией Python 3 или py -3.5 myscript.py может использоваться для запуска с Python 3.5, даже если доступны более поздние версии.Начиная с версии 3.6, без аргументов запускается последняя версия Python, которую вы установили;для модуля запуска 3.3-3.5 по умолчанию установлена ​​последняя версия Python 2, с ключом -3, необходимым для использования последней версии Python 3.
  3. Связав модуль запуска с .py расширение, вы можете использовать строки shebang в стиле UNIX в ваших скриптах.Например, если первая строка вашего скрипта #!/usr/bin/env python3 (довольно стандартная), и py.exe установлен и связан с .py файлами, то при запуске myscript.py это эквивалентно выполнению py -3 myscript.py

Вы можете узнать больше о PEP .

Дело в том, что py.exe на самом деле не хранит никаких собственных библиотек.Все, что он делает - это предоставляет общий интерфейс для поиска других существующих установок Python в Windows (хотя он поставляется только с версией 3.3 и выше, он также управляет более старыми установками, включая установки Python 2).К сожалению, pip должен выполняться безобразно, но в большинстве случаев это неизбежно, если вы хотите разрешить нескольким версиям Python существовать в системе, не нажимая друг на друга.Если вы установили оба 2.7 и 3.7, только один из них мог бы быть первым в вашем PATH, поэтому у вас будет только один python.exe и один pip для запуска;используя py.exe пусковую установку с py -2 -mpip или py -3 -mpip, вы можете быть точными, не ставя две установки друг на друга.

0 голосов
/ 21 сентября 2018

Не могли бы вы запустить обе версии Python с этими командами в обоих случаях:

import sys
print('\n'.join(sys.path))

Результатами является путь к библиотекам по умолчанию для соответствующей копии Python.

Анаконда не использует PYTHONPATH. Стандартная документация Python предлагает не настраивать эту переменную среды, так как разные версии Python могут иметь свои совместимые библиотеки.Итак, я бы предпочел не делать ничего, если у вас не осталось свободного места на диске.Один из Python должен быть установлен Cygwin, а другой - стандартным установщиком Python.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...