Вариант использования поэтического синтаксиса локальной зависимости отличается от того, что вам нужно, поэтому он не может решить вашу проблему здесь.
Из примеров использования в этих документах вы можете увидетьчто путь указывает на пакеты, которые не являются частью самого пакета, они всегда сначала покидают корень, например: ../some/different/location
.Вся конструкция полезна только во время разработки, и ее логика будет работать с poetry install
, а не poetry build
.
Что вы хотите, чтобы связать локальную зависимость вместе с вашим проектомтак что pip
будет знать во время развертывания .whl
вашего проекта, откуда вытащить локальную зависимость.Но поскольку pyproject.toml
не упаковывается вместе с метаданными колеса, информация о том, откуда получить зависимости, больше недоступна, поэтому она не может работать.Встроенный пакет знает только о своих зависимостях, а не о том, где их получить.Эта философия может быть немного необычной из других языков, где нет ничего необычного в том, чтобы связать все зависимости вместе с вашим кодом.
Таким образом, даже если вы можете собрать свой пакет, включив в него другое колесо, которое по умолчанию не работает, потому что setuptools
включает только файлы .py
в sdist / bdist по умолчанию, нет никакого способачтобы pip
знал, что зависимость достижима.Я вижу четыре варианта решения вашей проблемы способом, поддерживаемым Python.
- Используйте версию вашего
localdep
, установленную на pyPI , или загрузите ее туда.Но если бы это было возможно, вы бы, вероятно, не задавали этот вопрос. - Если
localdep
находится под вашим контролем и используется только mypackage
, запишите его как простой подмодуль mypackage
вместо этого - прочитайте, первоначальное решение сделать localdep
своим собственным пакетом было чрезмерным, что может быть или не быть правдой. - Использовать способ продавца
localdep
, который понимает Python.Возьмите это руководство для подробного объяснения со всеми соображениями и подводными камнями, или этот хакерский пост , если вы хотите, чтобы он заработал без необходимости по-настоящему понимать, почему или как. - Разверните свой пакет как "рулевую рубку".
Что такое рулевая рубка?
Для части рулевой рубки требуется немного больше текста, но это можетбыть ближе всего к тому, что вы изначально имели в виду.При таком подходе вам не нужно включать localdep
в ваш проект, и всю папку mypackage/lib
лучше всего удалить.localdep
должен быть установлен только в ваш интерпретатор python, что вы можете убедиться, запустив pip freeze
и проверив выходные данные на localdep's
имя и версию.
Этот же вывод будет использован для построения указанногорубка с pip wheel -w wheelhouse $(pip freeze)
.Если вы не хотите включать зависимости dev, удалите свой текущий virtualenv , настройте его и введите его, прежде чем снова запустить команду wheel с poetry install; poetry shell
.
Для полноты картины,вы можете собрать dist/myproject.whl
с poetry build
и добавить его туда, а затем вы можете просто использовать эту рулевую рубку для установки вашего пакета где угодно, запустив python -m pip install wheelhouse/*
с любым python
, который вы хотите.
Зачем для этого использовать pip, а не поэзию?
Poetry - это менеджер зависимостей для разработки пакетов, так как он не столько решает проблемы развертывания, сколько лишь нацелен на них.Это обычно хорошо, потому что pip
, как мы видели, вполне в этом отношении.pip
не очень удобно во время развития, поэтому поэзия хороша, но поэзия не полностью заменяет pip
.