автоматизировать переключение между средами с различными зависимостями для проектов Python - PullRequest
0 голосов
/ 07 февраля 2019

Я работаю над разными проектами на Python, которые используют разные версии одной и той же библиотеки.Когда я устанавливаю библиотеки с помощью pip, они устанавливаются глобально, и это единственная версия.Единственный известный мне способ иметь разные версии одной и той же библиотеки - это создать среду conda для каждого проекта.Тем не менее, становится немного раздражающим переключаться между средами все время, когда я работаю над многими проектами одновременно.

Я привык к npm, где каждый проект узла имеет свой собственный каталог node_modulesкоторый, по сути, создает виртуальную среду без необходимости явно создавать и переключать среды.Есть ли способ получить рабочий процесс, похожий на Npm в Python?Является ли явное создание среды conda для каждого отдельного проекта лучшим вариантом в python?Если да, есть ли какие-либо общие инструменты или сценарии для улучшения этого рабочего процесса?(например, есть ли эквивалент package.json или npm install для python?)

1 Ответ

0 голосов
/ 07 февраля 2019

На самом деле, для Python все почти так же: Pipenv .

Pipenv - это оболочка над virtualenv .Virtualenv - это виртуальная установка Python с установленными зависимостями, которую вы можете активировать только тогда, когда вам это нужно.

Вы можете установить Pipenv из pip:

$ pip install --user pipenv

Для использования Pipenv,Вы можете инициализировать его в существующем каталоге, указав версию Python:

~/project$ pipenv --python 3.5
Creating a virtualenv for this project…
Pipfile: ~/project/Pipfile
Using /usr/local/bin/python3.5 (3.5.6) to create virtualenv…
⠴Running virtualenv with interpreter /usr/local/bin/python3.5
Using base prefix '/usr/local'
New python executable in ~/.local/share/virtualenvs/project-FR7x7nea/bin/python3.5
Also creating executable in ~/.local/share/virtualenvs/project-FR7x7nea/bin/python
Installing setuptools, pip, wheel...done.

Virtualenv location: ~/.local/share/virtualenvs/project-FR7x7nea
Creating a Pipfile for this project…

Это создаст файл с именем Pipfile, который сохранит ваши зависимости.Выглядит это так:

[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"

[packages]

[dev-packages]

[requires]
python_version = "3.5"

Вы можете установить зависимости с помощью pipenv install, так же, как и с pip:

pipenv install numpy

Это добавит его в ваш Pipfile и заморозьте его версию в Pipfile.lock.Вы всегда должны управлять своими зависимостями из команд pipenv, а не редактировать эти файлы вручную.

Кроме того, вы можете перейти к pipenv установить файл requirements.txt, который будет иметь тот же эффект, что и с pip,Файл requirements.txt является стандартным при работе с pip;Pipenv ожидает тот, который уважает этот формат.Например, следующее допустимое минимальное значение requirements.txt:

docopt

Это просто означает, что вы хотите docopt в любой версии.Если вам нужна конкретная версия для ваших зависимостей, pip также поддерживает это .Вы передаете его в pipenv install с флагом -r:

~/project$ pipenv install -r requirements.txt
Requirements file provided! Importing into Pipfile…
Pipfile.lock (c2e94e) out of date, updating to (5a67c1)…
Locking [dev-packages] dependencies…
Locking [packages] dependencies…
Updated Pipfile.lock (c2e94e)!
Installing dependencies from Pipfile.lock (c2e94e)…
  ?   ▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉ 2/2 — 00:00:02
To activate this project's virtualenv, run pipenv shell.
Alternatively, run a command inside the virtualenv with pipenv run.

Наконец, вам нужно активировать виртуальную среду, упакованную Pipenv, чтобы иметь эффективный доступ к зависимостям.Это делается с помощью pipenv shell (хотя вы можете выполнить одну команду с помощью pipenv run <cmd>):

~/project $ pipenv shell
(project) ~/project$ python
Python 3.5.6 (default, Dec  3 2018, 12:12:20) 
[GCC 8.2.1 20180831] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy
>>>

Приятно то, что вы можете клонировать случайное репо из Github,инициализируйте Pipenv и запустите pipenv install -r requirements.txt, чтобы подготовить чистую среду для запуска проекта (предостережение заключается в том, что загрузка всех зависимостей может занять некоторое время).Зависимости будут устанавливаться только в виртуальной среде, сохраняя чистоту других ваших виртуальных сред и среды вашего хоста.

Дополнительные сведения здесь: https://docs.python -guide.org / dev / virtualenvs /

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