Зачем pipenv нужны Pipfile и Pipfile.lock? - PullRequest
0 голосов
/ 23 октября 2018

(я думаю [!]) Я понимаю принципы, лежащие в основе pipenv (и других венв), и часто их использую.Тем не менее, я никогда не понимал, почему pipenv нужен файл Pipfile и Pipfile.lock.

Этот ответ подразумевает, а этот урок говорит

Теперь, когда вы получите свой код и Pipfile.lock в своей производственной среде, вы должны установить последнюю успешную записанную среду:

$ pipenv install --ignore-pipfile

, но это не такОбъясните , почему Pipfile.lock нужно , чтобы использовать.то есть, что содержит файл .lock, которого нет Pipfile, и почему Pipfile достаточно хорош, чтобы поделиться с другим разработчиком:

Теперь давайте предположим, что другой разработчик хочет сделать некоторыедополнения к вашему коду.В этой ситуации они получат код, включая Pip-файл, и воспользуются этой командой:

$ pipenv install --dev

, но недостаточно для того, чтобы использовать ее для репликации своей среды в рабочей среде?

Ответы [ 3 ]

0 голосов
/ 23 октября 2018

Как сказал @Chris, Pipfile.lock для компьютера, а Pipfile для человека.Если вы посмотрите на файл Pipfile.lock, вы обнаружите, что в каждой зависимости даже есть коды sha256!

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

0 голосов
/ 23 октября 2018

Это инструмент наподобие npm. (Может быть?)
Pipfile - для определения зависимости вашего проекта, вы получите дерево зависимостей из Pipfile.
Но в зависимости отисточник, вы получите разные пакеты.Таким образом, вы можете получить фактическую локальную зависимость из файла .lock.
Например, в Pipfile вы можете увидеть что-то вроде:

matplotlib = "*"
numpy = "*"

Но в файле .lock вы увидите фактическую зависимостьнапример:

"pytz": {
        "hashes": [
            "sha256:a061aa0a9e06881eb8b3b2b43f05b9439d6583c206d0a6c340ff72a7b6669053",
            "sha256:ffb9ef1de172603304d9d2819af6f5ece76f2e85ec10692a524dd876e72bf277"
        ],
        "version": "==2018.5"
    }

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

0 голосов
/ 23 октября 2018

В официальном проекте Pipfile есть, что сказать по этому поводу :

Конкретные требования к приложению Python будут исходить от Pipfile.Это будет включать информацию о том, откуда следует извлекать пакеты, и об их ограниченных версиях.

Подробности среды (все установленные пакеты с закрепленными версиями и другие подробности) будут храниться в Pipfile.lock для воспроизводимости.Этот файл будет сгенерирован автоматически и не должен изменяться пользователем.

Другими словами, Pipfile для людей и Pipfile.lock для компьютеров.

В вашем Pipfile вы перечисляете вещи, которые хотите в этом файле, и определяете их довольно свободно, как «Django версии 2 или выше».Но этого недостаточно для детерминированного воспроизведения окружающей среды.Означает ли это, что «Django 2.0.3» или «Django 2.1.0»?

Pipfile.lock точно определяет требования, а также точно определяет зависимости .Например, если вы явно хотите foo и поместите его в Pipfile, ваш Pipfile.lock будет сгенерирован, привязав его к определенной версии.Если foo зависит от bar, а bar зависит от quux и florp, файл Pipfile.lock также заблокирует bar, quux и florp, поэтому незначительные различияв зависимостях не ломай вещи.

...