Як використовуються Pipfile та Pipfile.lock?


132

Здається, що Pipfile / Pipfile.lock призначені як заміна для вимог.txt, в контексті упаковки Python. Однак існує не так багато документації про те, як вони насправді працюють. Я знайшов розвивається опис pipfile на ділянці PyPi сайту Python тут , але це досить брудно і не пояснює семантику різних секцій файлу.

Будь-які вказівки, як зрозуміти ці файли?


2
Це прямий аналог Gemfileі Gemfile.lockвід світу Ruby: .lockФайл має конкретні версії для кожної залежності; той, що не має цього розширення, має лише відомі для контролістів версії. Це сказати, просити пояснення чогось, що все ще розвивається і далеко не чітко визначеного, набагато менш стандартизованого, можливо, трохи передчасно.
Чарльз Даффі

(І аналогічно, різниця між Pipfileі requirements.txtзначною мірою полягає в тому, що перший намагається прийняти функції зі світу Ruby, тобто можливість встановити набори залежностей для декількох середовищ та з умовами / параметрами тощо тощо в одному файлі).
Чарльз Даффі

1
Схоже, це вже розгорнуто в репортажі Heroku "початок роботи з Python" ( github.com/heroku/python-getting-started.git ), так подобається чи ні, схоже, що це виробляється.
Стівен

Готча. Це сказало - документи виглядають досить солідно для мене. Я не знаю, що я можу написати у відповіді, що не буде просто їх перезаписом.
Чарльз Даффі

1
Якщо ви посилаєтесь на посилання, яке я зробила в ОП, то є ряд речей, пропущених, наприклад, що це насправді означає, що щось знаходиться у розділі, що називається джерелом.
Стівен

Відповіді:


166

Концепція цих файлів проста та аналогічна іншим уже існуючим інструментам, якщо ви знайомі з Bundler Ruby або Npm Npm. Pipenvє як пакетом, так і інструментом управління віртуальним середовищем, який використовує файли Pipfile та Pipfile.lock для досягнення цих цілей.

Pipenv обробляє віртуальне середовище для вас одним стандартним способом (більше не потрібно активувати та дезактивувати). Нижче про деякі основи для початку роботи див. На веб-сайті pipenv .

Починаємо

Почати використовувати pipenv досить просто, у папці вашого проекту проект ...

$ pipenv install

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

$ pipenv uninstall <package>

... і ти добре підеш. Щоб активувати віртуальне середовище, яке вже створило pipenv, перейдіть за допомогою ...

$ pipenv shell

... і ваше віртуальне середовище буде активовано. Вийти з оточення ...

$ exit

... і ви повернетесь до свого початкового сеансу терміналу.

Pipfile

Файл Pipfile призначений для визначення вимог до пакунків для вашої програми або бібліотеки Python, як для розробки, так і для виконання. Ви можете встановити пакет, просто використовуючи ...

$ pipenv install flask

... і буде додано як залежність від розгортання та виконання або за допомогою ...

$ pipenv install --dev pytest

... і він буде використовуватися як залежність від часу розвитку. Синтаксис файлу досить прямий вперед.

[[source]] # Here goes your package sources (where you are downloading your packages from).
url = "https://pypi.python.org/simple"
verify_ssl = true
name = "pypi"

[packages] # Here goes your package requirements for running the application and its versions (which packages you will use when running the application).
requests = "*"
flask = "*"
pandas = "*"

[dev-packages] # Here goes your package requirements for developing the application and its versions (which packaes you will use when developing the application)
pylint = "*"
wheel = "*"

[requires] # Here goes your required Python version.
python_version = "3.6"

Pipfile.lock

Pipfile.lock призначений для вказівки, на основі даний пакетів в Pipfile , які слід використовувати конкретний варіант тих, уникаючи ризики автоматичного оновлення пакетів , які залежать один від одного і розірвати ваше дерево залежностей проекту.

Ви можете заблокувати поточно встановлені пакети, використовуючи ...

$ pipenv lock

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


Це цікава відповідь, але я думаю, що коли я питав, я не міг повністю зрозуміти, що насправді мається на увазі [[source]], наприклад, це джерело пакетів, які завантажуються pipenv чи щось інше? Я думаю, що решта двох файлів очевидно.
Стівен

1
Зізнаюся, я вважав це заплутаним, тому що я працюю над підручником, де я маю вирішити, чи важлива різниця [пакет] / [dev-package], чи потрібно просто все вкласти в [пакет]. (Гуглінг для цього саме мене привів на цю сторінку.) Але те, що вони вводили речі [в пакет], викинули мене. Я можу зрозуміти, чому запити повинні бути в [пакет] хоч.
Al Sweigart

1
Змінили, як вимагали, щоб уникнути плутанини на пакунках розробки, дякую за коментар, сподіваюся, що зараз це менш заплутано :)
danieldeveloper001

1
Я думаю, що це гарна ідея, якщо ви хочете відслідковувати версії пакетів по ходу еволюції вихідного коду, оскільки більшість пакетів буде розміщена з версією Pipfile. Якщо в процесі оновлення пакета щось зламається, тоді ви зможете це виправити, переглянувши історію версій пакета, і дійсно, один із творців бібліотеки запитів рекомендує це робити тут .
danieldeveloper001

1
@Stephen, насправді навпаки, як зазначено в документації на встановлення pipenv, ви можете вказати --skip-lockпрапор, щоб змусити його ігнорувати Pipfile.lockфайл, а не змушувати його використовувати;)
danieldeveloper001
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.