Обновление от 2019.12.15 Понятия не имею Переключитесь на стихи.
Обычно используется в развитии Pythonvirtualenv pipОперационная среда проектов управления и зависимости. Использовать при создании нового проектаvirtualenvСоздайте виртуальную операционную среду, а затем используйтеpipУстановите зависимости и, наконец, используйтеpip freeze > requirements.txtДокументируйте зависимости проекта. В этом процессе возникнут некоторые проблемы:
- Информация о версии зависимости зависимых пакетов
- Неудобно обновлять пакеты зависимостей
- Различие зависимостей между средой разработки и производственной средой
Общий подход к решению вышеупомянутых проблем заключается в создании несколькихrequirements.txt,Например:requirements-dev.txt,requirements-prod.txtИ запишите информацию о версии зависимостей или выберитеPipenv: Python Dev Workflow for Humans.
Это очевидно из названияpipenv = pip + virtualenv.
использовать в разработкеpipenv
используется при разработке проектаpipenvОпыт работы с базовымиpipпоследовательно, и потомуpipenvОн также будет одновременно управлять виртуальной средой, и работа будет более плавной.pipenvиспользоватьPipfileиPipfile.lockдля управления информацией о зависимостях,Pipfile.lockКонтрольное значение хэша и информация о версии будут записаны в соответствии с установленными зависимостями.
Создайте виртуальную среду
В новом каталоге проекта вы можете создать виртуальную среду следующими способами:
$ pipenv --python 3.6
$ pipenv --python /path/to/python
$ pipenv install requests --python 3.6
Примечание: если не используется--pythonЕсли параметр указывает версию Python, он будет создан с версией Python по умолчанию.Если вы хотите указать версию Python по умолчанию, вы можете передать переменную средыPIPENV_DEFAULT_PYTHON_VERSIONКонфигурация, которая может быть установлена на номер версии Python:3.6.8или путь к программе интерпретатора Python.
Если вам нужно указать каталог виртуальной среды выполнения, который будет создан в каталоге проекта, это можно сделать двумя способами:
- воплощать в жизнь
pipenvсоздать раньше.venvсодержание
$ mkdir .venv && pipenv install requests --python 3.6
- настроить
PIPENV_VENV_IN_PROJECTпеременная среды
$ export PIPENV_VENV_IN_PROJECT=1
Если вы хотите настроить этот каталог, вам нужно передать переменные средыWORKON_HOMEнастроить.
Создайте виртуальную среду из существующего проекта
Для существующих проектов его можно разделить на три случая:
- не использовал
pipenv
использоватьpipenv install -r path/to/requirements.txt --python 3.6для установки зависимостей.
- Намерение использовать, но должна быть совместима со старым способом
пройти черезpipenv lock -r > requirements.txtСоздайте файлы управления зависимостями в том же формате, что и pip.
- уже используется
Можно использовать по мере необходимостиpipenv installилиpipenv sync. Оба создадут виртуальную среду, используя указанный источник PyPI для следования зависимостям, разницаpipenv installбудет основываться наPipfileУстановите зависимые пакеты с информацией о версии и заново создайтеPipfile.lock;иpipenv syncбудет основываться наPipfile.lockИнформация о версии в установке зависимостей.
этоpipenv installУстановленная версия пакета зависимостей может быть обновлена, и конкретный механизм подробно описан в разделе Управление пакетами зависимостей.
Активировать виртуальную среду
Вы можете активировать виртуальную среду перед запуском Python:
$ pipenv shell
Или запустить напрямую:
$ pipenv run python main.py
В корневом каталоге проекта есть.envКогда файл конфигурации среды активирован, виртуальная среда будет загружена одновременно..envКонфигурация переменной среды в файле, если вы не хотите использовать эту функцию, вы можете настроить ее с помощьюPIPENV_DONT_LOAD_ENVпеременная, чтобы отключить его.
Управление пакетами зависимостей
pipenvКак использовать инсталляционный пакет иpipВ основном то же самое, выполнять непосредственно в каталоге проектаpipenv install requestПри установке он будет установлен в каталог виртуальной среды, если виртуальной среды нет, он будет установлен после создания.
Инсталляционный пакет
Если информация о версии не указана,Pipfileне будет указывать версию в новом каталоге, если используется в новом каталогеpipenv installУстановите последнюю версию пакета зависимостей напрямую.
$ pipenv install requests
Следующие методы указаны как1.2или выше, но не больше или равно2.0,использоватьpipenv installПри установке зависимостей, если новая версия1.2прибыть2.0Между (не включает2.0версия) будет обновляться
$ pipenv install “requests~=1.2”
Дополнительные версии указаны следующим образом:
$ pipenv install "requests>=1.4" # 版本号大于或等于 1.4.0
$ pipenv install "requests<=2.13" # 版本号小于或等于 2.13.0
$ pipenv install "requests>2.19" # 版本号大于 2.19.0
Если вы используете этот пакет только в среде разработки, вы можете добавить--devУстановка параметров:
$ pipenv install ipython --dev
пакет обновления
- Доступ к пакетам обновлений
$ pipenv update --outdated
- Обновить все зависимости
$ pipenv update
- Обновить указанные зависимости
$ pipenv update request
Примечание. При обновлении версии зависимого пакетаPipfileОграничение информации о средней версии, если вы хотите установить версию за пределами ограничения, вам необходимо выполнитьpipenv install <pkg>Установить.
удалить пакет
$ pipenv uninstall requests
- Просмотр зависимостей
$ pipenv graph
После установки или удаления зависимых пакетовpipenvбудет обновленоpipfileиpipfile.lock
Настройте источник зеркала PyPI
pipобычно используютpip.confили--index-urlпараметры для настройки источника зеркала PyPI,pipenvСуществует множество конфигураций:
- Используйте переменные среды
PIPENV_PYPI_MIRRORконфигурация.
$ export PIPENV_PYPI_MIRROR=https://mirrors.aliyun.com/pypi/simple/
- используя проект
pipfileконфигурация файла.
по проектуpipfileв файле[[source]]Разделы также могут настраивать источник установки и вступают в силу только для этого проекта.
[[source]]
name = "pypi"
url = "https://mirrors.aliyun.com/pypi/simple/"
verify_ssl = true
...
Сотрудничатьpyenvиспользовать
Можно установить под Linux и macOSpyenvиспользовать вместе сpipenvЕсли указанная версия Python не установлена, она будет вызванаpyenvСкомпилируйте и установите.
Сначала пожалуйста, обратитесь кpyenv: Common build problems - PrerequisitesУстановите зависимости сборки.
затем согласноSimple Python Version Management: pyenv - Installationустановленpyenv.
Примечание. Для пользователей Windows загрузите установочный пакет Python вручную и установите его черезpipenv --python X:\Python\...\python.exeукажите версию Python,Если вы хотите скомпилировать и установить, пожалуйста, решите это самостоятельно.
настроитьpyenv
Вы можете настроить кеш исходного кода и скомпилировать временные пути к файлам по мере необходимости, чтобы решить проблему, связанную с тем, что исходный пакет не может быть загружен из-за проблем с сетью, или/tmpНедостаток места в разделе приводит к сбою компиляции и установки.
- Кэш исходного пакета
Добавьте каталог кеша, затем поместите исходный пакет в каталог кеша и не будете повторно загружать исходный пакет в случае сбоя компиляции.
$ mkdir -p $(pyenv root)/cache
- Каталог временных файлов
Использовать системный путь к временному файлу по умолчанию/tmp, укажите другой путь в качестве каталога временных файлов.
$ mkdir ~/tmp
$ export TMPDIR="$HOME/tmp"
- Некоторые сторонние инструменты для работы с пакетами, такие как PyInstaller, требуют, чтобы CPython
--enable-sharedПараметрическая компиляция
$ env PYTHON_CONFIGURE_OPTS="--enable-shared" pyenv install 3.6.8
использовать в развертыванииpipenv
Чтобы убедиться, что версия зависимостей, установленных во время развертывания, соответствует выпуску, вы не можете использоватьpipenv installДля установки необходимо добавить--deployпараметр.
$ pipenv install --deploy
Если вы не используете виртуальную среду, вам также необходимо добавить--systemпараметр
$ sudo pipenv install --deploy --system
Использование в Докереpipenv
Вот Dockerfile для справки.
FROM python:3.6.8
ENV PIP_INDEX_URL https://mirrors.aliyun.com/pypi/simple/
RUN pip3 install pipenv --no-cache-dir
RUN set -ex && mkdir /app
WORKDIR /app
COPY Pipfile Pipfile
COPY Pipfile.lock Pipfile.lock
RUN set -ex && pipenv install --deploy --system
COPY . /app
EXPOSE 8888
CMD ["python3", "main.py"]
Вы также можете сначала создать базовый образ, а затем использовать его при создании образа приложения, предполагая, что созданный тег базового образаtomczhen/python-pipenv-base:3.6.8.
- Base Image Dockerfile
FROM python:3.6.8
ENV PIP_INDEX_URL https://mirrors.aliyun.com/pypi/simple/
RUN pip3 install pipenv --no-cache-dir
RUN set -ex && mkdir /app
WORKDIR /app
ONBUILD COPY Pipfile Pipfile
ONBUILD COPY Pipfile.lock Pipfile.lock
ONBUILD RUN set -ex && pipenv install --deploy --system
- Python Application Image Dockerfile
FROM tomczhen/python-pipenv-base:3.6.8
COPY . /app
EXPOSE 8888
CMD ["python3", "main.py"]
pipenvНедостатки
Конечно, у pipenv есть и недостатки.
блокировка занимает много времени
Lock updating is very slow · Issue #1914 · pypa/pipenv
Это вопрос стоимости.
Так как его нужно генерировать на основе зависимостей и хэшей файловPipfile.lock, эта проблема не должна быть полностью решена в краткосрочной перспективе, она должна бытьpipenvСуществует компромисс между функцией управления зависимостями и скоростью.
Текущий метод заключается в использовании при установке зависимостейpipenv install --skip-lockпропустить сборку/обновлениеPipfile.lock, а затем выполнить при необходимостиpipenv lockгенерировать/обновлятьPipfile.lock
кроссплатформенная проблема
Строго говоря, это неpipenvПроблема.
Некоторые пакеты имеют разные зависимости на разных платформах, напримерPyInstallerМожет использоваться на нескольких платформах, но зависит только от пакета pywin32 в Windows из-заPipfile.lockгенерируется на основе установленного пакета, в предыдущемpipenvВерсия приведет к сбою установки зависимостей при кроссплатформенности (в текущей новой версии проблем нет).
в соответствии сProblem with Pipfile and system specific packages · Issue #1575 · pypa/pipenvСогласно обсуждению в Pywin32, даже если pywin32 исправляет проблему, она может быть решена только в новой версии, поэтому, если есть перекрестная платформа, необходимо определить, нормально ли это.