Каков наилучший способ установки пакетов Python?

41

Каков наилучший способ установки пакетов Python в Ubuntu 11? Я недавно перешел на Ubuntu и хочу изучить лучшие практики.

Для контекста я ищу установить пакет tweeststream, но я не видел его в моем менеджере пакетов Synaptic. Кроме того, я очень новичок в программировании, но обычно я могу следовать за примерами кода.

Btibert3
источник

Ответы:

30

Я думаю, что лучшим способом для вас было бы установить систему упаковки Python типа "python-pip". Вы можете установить его с помощью Synaptic или Ubuntu Software Center.

Pip позволит вам легко устанавливать и удалять пакеты Python, просто как pip install package. В вашем случае это будет что-то вроде этого из терминала:

sudo pip install tweeststream
zetah
источник
3
Это хорошо для простых пакетов, но не так хорошо для больших пакетов, например, numpy
hayd
@hayd: почему? Это относится к askubuntu.com/questions/595366/…
naught101
2
@ naught101 Я думаю, что, вероятно, имел в виду scipy, не уверен, что это связано ... похоже, что pip слишком поздно в пути Python. Я настоятельно рекомендую использовать anaconda / conda, он намного превосходит pip IMO.
Хайд
2
ИМХО использовать sudo pip <anything>следует очень осторожно. Поскольку tweetstreamнет в Центре программного обеспечения Ubuntu , я рекомендую использовать virtualenv . tweetstream - хsetup.py требует , anyjsonкоторый является Ubuntu пакет . Отказ от установки tweetstream в virtualenvможет привести anyjsonк сбою других приложений Ubuntu, от которых он зависит . Устранить неисправность сложно.
Марк Микофски
9
Повторим: не используйте sudo pipв Ubuntu. @MarkMikofski: вам не нужен virtualenv (если вы не хотите этого по какой-то определенной причине). python -mpip install --user package-nameМожно установить пакет packafe-nameдля текущего пользователя. Если есть сложные (большие расширения C) зависимости; вы можете установить их, используя apt-get, чтобы избежать установки зависимостей сборки без необходимости.
JFS
37

обновлено: 2019-05-11: В этом посте в основном упоминается virtualenv, но в соответствии с документом Python об установке модуля , так как в Python 3.5 « venvтеперь рекомендуется использовать для создания виртуальных сред», хотя virtualenvон является альтернативой для версий Python до 3.4 ,

обновлено: 2018-08-17: начиная с использования conda -4.4.0conda для activateанаконды на всех платформах

обновлено: 2017-03-27: PEP 513 - manylinuxдвоичные файлы для PyPI

Обновлено: 2016-08-19: Континуум Anaconda Option

Это в некоторой степени дубликат easy_install / pip или apt-get .

Для глобальных пакетов Python используйте Ubuntu Software Center, apt, apt-get или synaptic.

Ubuntu использует Python для многих важных функций, поэтому вмешательство в Python может повредить вашу ОС. Это основная причина , почему я никогда не использую pipв моей системе Ubuntu, но вместо этого я использую либо Ubuntu Software Center, синаптические , apt-getили новее только apt, что все по умолчанию установки пакетов из репозитория Ubuntu . Эти пакеты тестируются, как правило, предварительно скомпилированы, поэтому они устанавливаются быстрее и в конечном итоге предназначены для Ubuntu. Кроме того, все необходимые зависимости также установлены и ведется журнал установок, чтобы их можно было откатить. Я думаю, что большинство пакетов имеют соответствующие репозитории Launchpad, так что вы можете подавать проблемы.

Еще одна причина использования пакетов Ubuntu заключается в том, что иногда эти пакеты Python имеют разные имена в зависимости от того, откуда вы их загрузили. Python-chardet - это пример пакета, который одно время назывался в PyPI одним, а в репозитории Ubuntu - другим. Поэтому, pip install requestsесли вы сделаете что- то подобное, вы не поймете, что chardet уже установлен в вашей системе, потому что версия Ubuntu имеет другое имя, и, следовательно, установите новую версию, которая повредит вашу систему незначительным незначительным образом, но все же зачем вам это делать.

В общем, вы хотите установить только доверенный код в вашу ОС. Так что вы должны нервничать по поводу набора текста $ sudo pip <anything-could-be-very-bad>.

Наконец, некоторые вещи проще установить с помощью пакетов Ubuntu. Например, если вы попытаетесь pip install numpyустановить numpy & scipy, если вы еще не установили gfortran, atlas-dev, blas-dev и lapack-dev, вы увидите бесконечный поток ошибок компиляции. Однако установить Numpy & Scipy через репозиторий Ubuntu так же просто, как ...

$ sudo apt-get install python-numpy python-scipy

Вам повезло, потому что вы используете Ubuntu, один из наиболее широко поддерживаемых и часто обновляемых существующих дистрибутивов. Скорее всего, каждый пакет Python, который вам понадобится, находится в репозитории Ubuntu и, вероятно, уже установлен на вашем компьютере. И каждые 6 месяцев будет выпущен новый цикл пакетов с последним дистрибутивом Ubuntu.

Если вы на 100% уверены, что пакет никак не повлияет на вашу систему Ubuntu, вы можете установить его с помощью pip, и Ubuntu достаточно хорош, чтобы отделить эти пакеты от пакетов дистрибутивов, поместив пакеты дистрибутивов в папку с именем dist-packages/, В хранилище Ubuntu есть как pip, virtualenv, так и setuptools. Тем не менее, я поддерживаю предложение Войцеха использовать virtualenv.

Для личных проектов Python используйте pip и wheel в virtualenv

Если вам нужна последняя версия или модуль отсутствует в репозитории Ubuntu, запустите virtualenv и используйте pip для установки пакета. Несмотря на то, что pip и setuptools объединены, IMO pip предпочтительнее, чем easy-install или distutils, потому что он всегда будет ждать, пока пакет полностью не будет загружен и собран, прежде чем скопировать его в вашу файловую систему, и он обновляет или удаляет бриз. Во многих отношениях он похож на apt-get в том смысле, что он обычно хорошо обрабатывает зависимости. Однако вам , возможно, придется самостоятельно обрабатывать некоторые зависимости, но после принятия PEP 513manylinux в индексе пакетов Python (PyPI) теперь есть бинарные файлы для популярных дистрибутивов Linux, таких как Ubuntu и Fedora .например, как упомянуто выше для NumPy и SciPy, убедитесь, что вы установили gfortran, atlas-dev, blas-dev и lapack-dev из репозитория Ubuntu. Например, и NumPy, и SciPy теперь по умолчанию распространяются для Ubuntu в качестве manylinuxколес , используя вместо этого OpenBLAS атлас. Вы все еще можете построить их из исходного кода, используя параметры pip --no-use-wheelили--no-binary <format control> .

~$ sudo apt-get install gfortran libblas-dev liblapack-dev libatlas-dev python-virtualenv
~$ mkdir ~/.venvs
~$ virtualenv ~/.venvs/my_py_proj
~$ source ~/.venvs/my_py_proj/bin/activate
~(my_py_proj)$ pip install --no-use-wheel numpy scipy

См. Следующий раздел «Вы не в sudoers» ниже, чтобы установить обновленные версии pip, setuptools, virtualenv или wheel в свой личный профиль, используя --userсхему установки с pip. Вы можете использовать это, чтобы обновить pip для личного использования, как JF Sebastian указал в своем комментарии к другому ответу . ПРИМЕЧАНИЕ: -mдействительно необходимо только в MS Windows при обновлении pip .

python -m pip install --user pip setuptools wheel virtualenv

Более новые версии pip автоматически кэшируют колеса, поэтому следующее полезно только для более старых версий pip. Поскольку вы можете в конечном итоге установить их много раз, рассмотрите возможность использования колеса с pip для создания рулевой рубки. Колесо уже включено в virtualenvначиная с версии 13.0.0, поэтому, если ваша версия virtualenvслишком старая, вам может потребоваться сначала установить колесо.

~(my_py_proj)$ pip install wheel  # only for virtualenv < v13.0.0
~(my_py_proj)$ pip wheel --no-use-wheel numpy scipy

Это создаст двоичные файлы колес <cwd>/wheelhouse, используйте -dдля указания другого каталога. Теперь, если вы запустили еще один virtualenv и вам нужны те же пакеты, которые вы уже собрали, вы можете установить их из своей рулевой рубки, используяpip install --find-links=<fullpath>/wheelhouse

Прочтите Установка модулей Python в документации по Python и Установка пакетов на главной странице индекса пакетов Python . Также pip , venv , virtualenv и колесо .

Если вы не в sudoersи virtualenvне установлены.

Другой вариант использования виртуальной среды, или если вы используете общий ресурс Linux без привилегий root, то использование схем установки Python --userили --home=<wherever-you-want>Python с установками Python distutilsприведет к установке пакетов со значением site.USERBASEили туда, куда вы хотите. Более новые версии pip также имеют --userопцию. Не используйте sudo!

pip install --user virtualenv

Если ваша версия pip для Linux слишком старая, вы можете передать параметры настройки, используя --install-optionкоторые можно использовать для передачи пользовательских параметров в некоторые setup.pyсценарии для некоторых пакетов, которые создают расширения, например, для установки PREFIX. Возможно , вам просто извлечь распределение и использование distutilsдля установки пакета старой школы пути, набрав python setup install [options]. Чтение некоторой документации по установке и distutilsдокументации может помочь.

Python достаточно хорош, чтобы добавить site.USERBASEк вашему PYTHONPATHопережению что-либо еще, поэтому изменения будут влиять только на вас. Популярное место для --homeэто ~/.local. См. Руководство по установке модуля Python для точной структуры файла и, в частности, где находятся ваши пакеты сайта. Примечание : если вы используете --homeсхему установки , то вам может понадобиться , чтобы добавить его в PYTHONPATHпеременную окружения , используя exportв вашем .bashrc, .bash_profileили в оболочке для локализованных пакетов будут доступны в Python.

Используйте Continuum Anaconda Python для математических, научных, личных или личных проектов

Если вы используете Python для математики, науки или данных, то для IMO действительно хорошим вариантом будет Anaconda-Python Distribution или более простой дистрибутив miniconda, выпущенный Anaconda, Inc. (ранее известный как Continuum Analytics ) . Хотя использование Anaconda для личных проектов может принести пользу любому, установка по умолчанию включает более 500 математических и научных пакетов, таких как NumPy, SciPy, Pandas и Matplotlib , в то время как miniconda устанавливает только Anaconda-Python и менеджер среды conda. Анаконда устанавливается только в свой личный профиль, то есть: /home/<user>/ и изменяет ваш ~/.bashrcили ~/.bash_profileпредварять путь Анаконды к вашим личнымам $PATH рекомендует поискconda.shв вашем, ~/.bashrcкоторый позволяет вам использовать conda activate <env|default is base>anaconda - это влияет только на вас - ваш системный путь не изменяется . Поэтому вам не нужен root-доступ или sudoиспользование Anaconda! Если вы уже добавили Anaconda-Python, miniconda или conda в свой личный путь, то вам следует удалить PATHэкспорт из вашего ~/.bashrcи обновить до новой рекомендации , чтобы ваш системный Python снова был первым.

Это несколько похоже на --userопцию, которую я объяснил в предыдущем разделе, за исключением того, что она применима к Python в целом, а не только к пакетам. Поэтому Anaconda полностью отделена от вашей системы Python , она не будет мешать вашей системе Python, и только вы можете использовать или изменять ее. Поскольку он устанавливает новую версию Python и все его библиотеки, вам потребуется не менее 200 МБ места, но он очень умен в отношении кэширования и управления библиотеками, что важно для некоторых интересных вещей, которые вы можете делать с Anaconda.

Anaconda хранит набор двоичных файлов и библиотек Python, необходимых для зависимостей в онлайн-хранилище (ранее называвшемся binstar ) , и они также размещают пользовательские пакеты в виде различных «каналов». Менеджер пакетов, используемый Anaconda, condaпо умолчанию устанавливает пакеты от Anaconda, но вы можете указать другой «канал», используя -cопцию.

Установите пакеты так condaже, как pip:

$ conda install -c pvlib pvlib  # install pvlib pkg from pvlib channel

Но condaмогу сделать гораздо больше! Он также может создавать и управлять виртуальными средами так же, как virtualenv. Поэтому, поскольку Anaconda создает виртуальные среды, pipменеджер пакетов можно использовать для установки пакетов из PyPI в среду Anaconda без root или sudo. Вы не использовать sudoс Анаконды! Предупреждение! Будьте осторожны, хотя при смешивании pipи condaв среде Anaconda, b / c, вам придется более тщательно управлять зависимостями пакетов. Другим вариантом pipв среде conda является использование канала conda-forge., но также лучше всего делать это в свежей среде conda с conda-forge в качестве канала по умолчанию. В крайнем случае, если вы не можете найти пакет нигде, кроме PyPI, рассмотрите возможность использования, а --no-depsзатем установите оставшиеся зависимости вручную, используя conda.

Анаконда также в чем-то похожа на Ruby RVM, если вы знакомы с этим инструментом. Anaconda condaтакже позволяет создавать виртуальные среды с различными версиями Python . Например : conda create -n py35sci python==3.5.2 numpy scipy matplotlib pandas statsmodels seabornсоздаст стек научных данных с использованием Python-3.5 в новой среде с именем py35sci. Вы можете переключать среды с помощью conda. Так как Конда-4.4.0, теперь это отличается , чтобы , virtualenvкоторый использует source venv/bin/activate, но предшествующий Конда-4.4.0 эти condaкоманды были так же , как virtualenvи используется также source:

# AFTER conda-4.4 
~/Projects/myproj $ conda activate py35sci

# BEFORE conda-4.4 
~/Projects/myproj $ source activate py35sci

Но подождите, это еще не все! Anaconda также может устанавливать различные языки, такие как R, для статистического программирования из канала Anacondar . Вы даже можете настроить свой собственный канал для загрузки дистрибутивов пакетов, созданных для conda . Как уже упоминалось, conda-forge поддерживает автоматическую сборку многих пакетов на PyPI на канале Ancononda conda-forge .

эпилог

Существует много вариантов поддержки ваших проектов Python в Linux в зависимости от ваших личных потребностей и доступа. Однако, если есть что-то, что я надеюсь, вы откажетесь от этого ответа, что вам почти никогда не нужно будет использовать sudoдля установки пакетов Python . Использование sudoдолжно быть запахом для вас, что что-то не так. Вы были предупреждены.

Удачи и счастливого кодирования!

Марк Микофски
источник
Хотелось бы прочитать это до того, как я уничтожу дистрибутив Python в моей системе, sudoработая с pip. Отличная рецензия, спасибо за эту информацию.
slhck
pip install numpyследует установить все зависимости
Timo
@Timo, как я уже упоминал в обновлении 2017-03-27, так как PEP 513 был реализован с помощью множества встроенных двоичных файлов linux , доступных в PyPI, которые построены с использованием OpenBLAS, то есть : они имеют необходимые зависимости. Однако, как правило, pip install <package>будут устанавливаться только зависимости пакета Python, перечисленные в install_requiresразделе setup.py. Например: установка Jupyter не установит библиотеку pandoc на Haskell для экспорта записных книжек Jupyter в виде LaTeX и т. Д.
Марк Микофски,
В отличие от этого, conda install <package>вероятно, будут установлены все зависимости, включая C / C ++, FORTRAN и т. Д., Даже библиотеки Haskell, потому что conda не просто управляет пакетами Python, такими как pip, она управляет средами. Так что, если у вас была Anaconda или miniconda, тогда вы conda install Jupyterустанавливаете все в файл рецептаmeta.yml , включая библиотеку pandoc Haskell . Для получения дополнительной информации см. PyPA
Марк Микофски
10

В дополнение к добавлению Novarchibald, как правило, хорошая идея - создать виртуальную среду для вашего проекта Python и установить внутри нее зависимости. Это позволяет вам лучше контролировать зависимости и их версии. Чтобы настроить виртуальную среду, введите:

virtualenv --no-site-packages --distribute my_python_project

Затем активируйте его с помощью:

cd my_python_project
source bin/activate

На этом этапе все, что вы устанавливаете с помощью pip, будет храниться в этой виртуальной среде. Если вы хотите установить что-то глобально, сначала вы должны выйти из virtualenv с помощью:

deactivate

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

Войтек Зилинский
источник
1
В качестве альтернативы: используя pip из каталога virtualenv bin (здесь my_python_project / bin / pip), вы поддерживаете эту среду без необходимости «активировать» ее. Затем - с помощью любого из скриптов, установленных в бине, используется данный virutalenv. «Активировать» удобно только для вызова «python», «easy_install» и «pip» с помощью bin-файла для virtualenv.
Ян Влчинский
Документы по установке Python говорят, что используют pyvenv для создания виртуальных сред, специфичных для проекта; но это virtualenv - запасной вариант для проектов, использующих более старую версию Python, docs.python.org/3/install/index.html?highlight=pip .
pbhj
2
Обратите внимание, что эти virtualenvопции --no-site-packagesи --distributeустарели в настоящее время и больше не действуют.
корм
4

В дополнение к ответу Zetah'a, команда для установки python-pip из терминала:

sudo apt-get install python-pip
Novarchibald
источник
1

Попробуйте это графический интерфейс для PIP, разработанный с использованием PyQt4

Фреймворк с графическим интерфейсом для PIP, разработанный с использованием PyQt4

Начальный экран

введите описание изображения здесь

Начальный экран содержит параметры для пользователя, чтобы выбрать процесс, который он хочет выполнить.

Можно также указать версию python, с которой он хочет выполнить операции.

В меню «Файл» есть опция «Выход» (ярлык: Ctrl + Q) и «Обновить списки», которая обновляет файлы ресурсов, содержащие данные пакета.

Экран установки

введите описание изображения здесь

Экран установки имеет панель поиска, которую пользователь может использовать для поиска и установки желаемых пакетов.

Экран обновления

введите описание изображения здесь

На экране обновления отображается список пакетов, которые устарели и могут быть обновлены.

Удаление Screem

введите описание изображения здесь

На экране удаления отображается список пакетов, которые установлены в системе пользователя и могут быть удалены.

Окно прогресса

введите описание изображения здесь

Окно хода выполнения представляет собой встроенный виджет терминала для PIP-GUI, который отображает процессы, запущенные во время выполнения операций.

gavisic
источник
1
Добро пожаловать в Спросите Ubuntu! Хотя это может теоретически ответить на вопрос, было бы предпочтительным включить здесь основные части ответа и предоставить ссылку для справки.
Кевин Боуэн