У меня есть собственное приложение Python, которое развертывается в виде набора пакетов, и мне нужно, чтобы разработчик мог быстро проверить все эти пакеты как редактируемый источник, чтобы все приложение можно было редактировать на месте, а также изменения в все пакеты легко отбрасываются на исходный сервер git. Кроме того, приложение должно быть внедрено в качестве традиционных пакетов не разработчиком.
Скажем, у меня есть пакет верхнего уровня с setup.py
выглядит так:
# ...
setup(name="Foo",
# ...
url="https://mygitserver.com/Foo",
install_requires=[
"Bar>=0.0.1",
],
dependency_links=["git+https://mygitserver.com/[email protected]#egg=Bar-0.0.1",],
# ...
)
Я могу установить этот пакет как редактируемый с помощью следующей команды:
pip3 install -e git+https://[email protected]/Foo#egg=Foo --process-dependency-links
Это создаст каталог src/foo
и заполнит его исходным кодом для Foo
извлеченным с сервера git. Это хорошо.
Зависимость, Bar
, также извлекается с сервера git, но не устанавливается как редактируемая. pip3 freeze
просто показывает его как обычный установленный пакет под названием Bar
, поэтому URL-адрес git также теряется.
Есть ли способ вмешаться каким-то образом, и у вас есть возможность установить некоторые (не обязательно все) зависимости как редактируемые? Или мне нужно будет использовать requirements.txt
в этом случае? Если мне нужно использовать requirements.txt
, как я также гарантирую, что эти зависимости устанавливаются нормально при развертывании не-разработчиком?
Я знаю, что pip> 10 предназначен для устранения ссылок dependency_links
но на данный момент я застрял с pip 9.0.2. Я использую Python 3.5. Я нацелен на встроенную платформу, которая затрудняет их изменение, поэтому эти версии - это то, с чем я работаю на данный момент. Если pip> = 10 может сделать что-то новое, чтобы помочь в этой области, тогда я могу посмотреть на модернизацию, это просто не тривиально делать в этой системе.
Вы могли бы просто pip install -e <Bar-URL>
до этого, и когда вы установите Foo
, pip увидит, что зависимость уже установлена. Оба будут доступны для редактирования.
setup.py
- этот метод будет работать, но сначала мне понадобится pip, чтобы определить URL-адреса для каждой зависимости. Я могу сделать это, проанализировавsetup.py
'sinstall_requires
и сопоставив сdependency_links
но это утомительно. В случае не-разработчика, возможно, автоматизированной системы, она должна будет проработать все эти зависимости, а затем установить каждую из них самостоятельно, что обычно делает pip. Для простого проекта, такого как мой пример, он будет работать нормально.