Що таке еквівалент pip 'npm install package --save-dev'?


202

У nodejs я можу зробити, npm install package --save-devщоб зберегти встановлений пакет у пакет.

Як я можу досягти того самого в програмі менеджерів пакетів Python pip? Я б хотів зберегти назву пакета та його версію в, скажімо, requirements.pipвідразу після встановлення пакета, використовуючи щось подібне pip install package --save-dev requirements.pip.


4
pip freeze > requirements.pip
falsetru

5
Це не те саме. npm install package --save-devпоєднує одночасно встановлення та додавання до файлу вимог node_npm. Це зручніше. З цим pip freezeя повинен зробити дві команди, щоб зробити те саме: 1) pip install package2)pip freeze > requirements.pip
hllau

1
Pip має питання про --saveваріант.
руцький

Якщо ви використовуєте setup.py для вимог, я створив невеликий модуль, щоб заморозити версії вашого пакета в setup.py.
AdamGold

Відповіді:


166

Не існує еквівалента pip.

Найкращий спосіб - це pip install package && pip freeze > requirements.txt

Ви можете переглянути всі доступні параметри на їхній сторінці документації .

Якщо це насправді вас турбує, не важко буде написати користувальницький скрипт bash ( pips), який бере -sаргумент і автоматично зависає до вашого requirements.txtфайлу.

Редагуйте 1

З моменту написання цього запиту не було змін у наданні автоматичного --save-devваріанту, подібного до NPM, однак Кеннет Рейц (автор requestsта багато інших) опублікував додаткову інформацію про кращий робочий процес у файлах, щоб краще обробляти pipоновлення.

Редагувати 2

Посилання, пов'язані зі статтею "кращий робочий процес", тепер рекомендується використовувати pipenvдля управління вимогами та віртуальними середовищами. Нещодавно використовуючи це, я хотів би підсумувати, наскільки простий перехід:

Встановити pipenv(на Mac)

brew install pipenv

pipenvстворює та керує власними віртуальними середовищами, тому в проекті з існуючими requirements.txt, встановлення всіх вимог (я використовую Python3.7, але ви можете видалити, --threeякщо цього не зробити) так само просто:

pipenv --three install

Активувати virtualenv для запуску команд також легко

pipenv shell

Вимоги до встановлення автоматично оновлять PipfileіPipfile.lock

pipenv install <package>

Можливо також оновлення застарілих пакетів

pipenv update

Я настійно рекомендую перевірити його, особливо якщо він надходить із npmфонового режиму, оскільки він має подібне відчуття до package.jsonтаpackage-lock.json


22
Зауважте, що це також заощадить залежності, які з часом можуть більше не знадобитися, оскільки залежність відмовилась від використання.
Патрік Басут

Здається, це не стосується аспекту --save-dev оригінального питання, який дозволяє мати різні залежності від місцевого розвитку та виробництва. Як ти можеш цього досягти за допомогою pipenv?
jeznag

1
@jeznag pipenvдозволяє вказати dev-packagesв вашому Pipfileі / або використання --dev(або -d) з командного рядка. наприкладpipenv install --dev nose2
Еван

40

Ця проста лінія є відправною точкою. Ви можете легко побудувати команду bash для повторного використання ПАКЕТУ в рядку.

pip install PACKAGE && pip freeze | grep PACKAGE >> requirements.txt

Завдяки @devsnd за приклад простої функції bash:

function pip-install-save { 
    pip install $1 && pip freeze | grep $1 >> requirements.txt
}

Для його використання просто запустіть:

pip-install-save some-package

Мої п’ять копійокP=Flask pip install $P && pip freeze | grep $P >> requirements.txt
Гріан

4

Я створив пакет python, який обертається навколо фактично pipзваного pipm . Усі pipкоманди працюватимуть як є, плюс вони будуть відображені у файлі вимог. На відміну від pip-save(подібний інструмент, який я знайшов і не зміг використати), він може працювати з багатьма файлами та середовищами (тест, розробник, виробництво тощо). Він також має команду оновити всі / будь-які ваші залежності.

установка

pipm install pkg-name

встановлення як залежність від розвитку

pipm install pkg-name --dev

встановлення як залежність від тестування

pipm install pkg-name --test

видалення

pipm uninstall pkg-name

оновіть всі ваші залежності

pipm update

встановіть усі ваші залежності з файлу вимог

pipm install

включаючи залежності від розвитку

pipm install --dev


3

Оновлення: судячи з усього, pipenv офіційно не підтримується підтримками Python , а попередньо пов’язану сторінку належить іншій організації. Інструмент має свої плюси і мінуси, але наведене нижче рішення все-таки досягає результату, якого прагне ОП.

pipenv - це інструмент для управління залежністю, який pip, зокрема, забезпечує:

https://pipenv.kennethreitz.org/en/latest/#example-pipenv-workflow

$ pipenv install <package>

Це створить файл Pipfile, якщо його не існує. Якщо така існує, вона буде автоматично відредагована разом із новим наданим вами пакетом.

A Pipfileє прямим еквівалентом package.json, а Pipfile.lockвідповідає package-lock.json.


2

Я зробив швидкий злом, pipщоб додати --saveопцію для встановлення / видалення команд.

Перегляньте мій блог для отримання додаткової інформації про цей хак: http://blog.abhiomkar.in/2015/11/12/pip-save-npm-like-behaviour-to-pip/

Установка (GitHub): https://github.com/abhiomkar/pip-save

Сподіваюся, це допомагає.


1

ви можете вручну зберегти його в Makefile (або текстовий файл, а потім імпортувати у свій Makefile):


PYTHON=.venv/bin/python # path to pyphon
PIP=.venv/bin/pip # path to pip
SOURCE_VENV=. .venv/bin/activate


install:
    virtualenv .venv
    $(SOURCE_VENV) && $(PIP) install -e PACKAGE
    $(SOURCE_VENV) && $(PIP) install -r requirements.txt # other required packages

а потім просто біжи make install


Я повністю згоден з таким підходом.
eleijonmarck

1

Я використовую цей невеликий командний рядок, щоб встановити пакет і зберегти його версію в requirements.txt: pkg=package && pip install $pkg && echo $(pip freeze | grep -i $pkg) >> requirements.txt


0

Як щодо цього зробити функцію оболонки для цього? Додайте код нижче до свого ~/.profileабо~/.bashrc

pips() {
    local pkg=$1

    if [ -z "$1" ]; then
        echo "usage: pips <pkg name>"
        return 1
    fi

    local _ins="pip install $pkg"
    eval $_ins
    pip freeze | grep $pkg -i >> requirements.txt
}

потім запустіть source ~/.profileабо source ~/.bashrcімпортуйте його до вашого поточного терміналу

коли ви хочете встановити && зберегти пакет, просто запустіть, наприклад pips requests. після встановлення пакета його версія буде збережена requirements.txtу вашому поточному каталозі.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.