В моем CentOS7.2 у меня есть команда `python3`, но почему я не могу использовать pyvenv? - PullRequest
0 голосов
/ 11 мая 2018

В моем CentOS7.2 у меня есть команда python3, но почему я не могу использовать pyvenv?

[root@www myProject]# pyvenv --version
-bash: pyvenv: there is no command
[root@www myProject]# python3 --version
Python 3.5.2
[root@www myProject]# which python3
/usr/bin/python3

1 Ответ

0 голосов
/ 11 мая 2018

pyvenv устарело в 3,6, в пользу использования python3 -m venv.

Вас может удивить, как это связано с вашим Python 3.5.2, начиная с 3.5 <3.6. Что ж, если вы запустите установщик Python 3.5 или даже 3.6 из python.org или <code>make install из исходного кода, вы получите команду pyvenv (и, возможно, также pyvenv3, pyvenv3.5 и / или *). 1011 *). Но ты этого не делал; Вы использовали Python вашего дистрибутива 3.5.

В дистрибутивах давняя традиция разбивать большие пакеты, такие как Python, на основной пакет и различные «дополнительные» пакеты, такие как python3-pip или python3-curses. И не только Red Hat; 1 Debian и Ubuntu также разделяют venv в python3-venv пакет. То, как они решают, что является «основным», а что «необязательным», является сложным процессом, в котором много унаследованных проблем, поэтому я не знаю точно, каковы причины, но могу предположить.

Во-первых, большинство пользователей Linux предпочитают использовать pipenv и / или virtualenv. У них больше возможностей, они не застряли в ледниковом цикле выпуска Python, и вы можете использовать ту же версию с Python 3.4, 3.6 и даже 2.7. В 2011 году добавление venv выглядело как TOOWTDI для устранения несовместимых конкурирующих решений виртуальной среды, но вместо этого они стали совместимыми друг с другом, в то время как venv находился в состоянии стагнации. На самом деле, официальный Python Packaging Authority 2 рекомендует virtualenv для установки пакетов и pipenv для разработки приложений , а PyPA отклонил предложение изменить это в 2017 году .

Кроме того, как объясняется в документах 3.6, причина pyvenv устарела в основном из-за путаницы, которую это вызывает в дистрибутивах Linux, которые поставляют несколько версий Python.

И, наконец: venv зависит от pip. Который не встроен. Как это работает? Что ж, если вы получите бинарный установщик python.org, он будет включать pip. И если вы создаете его из исходного кода, Python (3.4+) использует ensurepip для начальной загрузки pip и setuptools. Но это в первую очередь для удобства пользователей Mac и Windows, а также людей, которые создают собственные версии Python; несколько дистрибутивов Linux используют ensurepip. В конце концов, причина, по которой вы используете корпоративный стабильный дистрибутив, заключается в том, что вам нужны конкретные, протестированные версии всего, что вы делаете, устанавливая их пакет python3-pip, а не получая kludgy pip из ensurepip и затем делать pip install --upgrade pip, чтобы получить будущую версию, которую они не тестировали. Поэтому, если дистрибутив не собирается объединять свои pip в свои пакеты python, нет смысла включать venv.


1. Конечно, CentOS 7.2 просто копирует RHEL 7.2, потому что в этом суть CentOS, поэтому вопрос в том, почему RHEL 7.2 сделал venv необязательным пакетом.

2. Насколько официальным является PyPA? Это не совсем понятно - он находится под PSF и использует SIG python.org, но поддерживает отдельное присутствие. Но если вы посмотрите на названия, это в основном одни и те же люди, которые являются и разработчиками ядра Python, и разработчиками для основных дистрибутивов Linux. Поэтому неудивительно, что эти дистрибутивы обращают внимание на PyPA - в обоих местах решения принимают одни и те же люди.

...