извлечение репозитория git для определенного коммита в файле python setup.py

У меня есть проект Python, в котором я использую проект maskrcnn_benchmark из исследования facebook.

В моем сценарии непрерывной интеграции я создаю виртуальную среду, в которой устанавливаю этот проект, выполнив следующие шаги:

 - git clone https://github.com/facebookresearch/maskrcnn-benchmark.git
- cd maskrcnn-benchmark
- git reset --hard 5ec0b91cc85163ac3b58265b3f9b39bb327d0ba6
- python setup.py build develop

Это отлично работает и устанавливает все в виртуальной среде так, как должно быть.

Теперь у меня есть setup.py для моего проекта по упаковке и развертыванию моего приложения. Как я могу сделать то же самое в этом файле setup.py, т.е. вытащить и построить этот репозиторий из определенного хэша коммита?

Благодаря ответу ниже и комментариям теперь у меня есть setup.py следующим образом:

install_requires=[
        '5ec0b91cc85163ac3b58265b3f9b39bb327d0ba6-0.1',
        'ninja',
        'yacs',
        'matplotlib',
        'cython==0.28.5',
        'pymongo==3.7.1',
        'scipy==1.1.0',
        'torch==1.0.0',
        'torchvision==0.2.1',
        'opencv_python==3.4.2.17',
        'numpy==1.15.1',
        'gputil==1.3.0',
        'scikit_learn==0.19.2',
        'scikit_image==0.14.0',
        'sk_video==1.1.10'
  ],

dependency_links=[
        'http://github.com/facebookresearch/maskrcnn-benchmark/tarball/master#egg=5ec0b91cc85163ac3b58265b3f9b39bb327d0ba6-0.1'
  ],

Независимо от того, куда я поместил '5ec0b91cc85163ac3b58265b3f9b39bb327d0ba6-0.1', проект maskrcnn-benchmark компилируется первым. Как я могу сделать так, чтобы зависимость и этот пакет устанавливались последними?


person Luca    schedule 13.03.2019    source источник
comment
Не можете использовать dependency_links=[ "git+ssh://[email protected]" ] ?   -  person IMParasharG    schedule 13.03.2019
comment
@GovindParasha Я вижу это, но могу ли я вытащить проект при конкретной фиксации? git reset --hard шаг?   -  person Luca    schedule 13.03.2019
comment
вы можете указать хэш фиксации в URL-адресе, т.е. master#egg=XXXXXXXXXXX   -  person IMParasharG    schedule 13.03.2019
comment
@GovindParashar Спасибо. Попробую обновить тему здесь. Пожалуйста, не стесняйтесь писать в качестве ответа, если хотите   -  person Luca    schedule 13.03.2019
comment
для т.е. web-jsp/tarball/   -  person IMParasharG    schedule 13.03.2019
comment
Добро пожаловать @Luca, я добавил ответ.   -  person IMParasharG    schedule 13.03.2019
comment
@GovindParasha попробовал ваше предложение, но кажется, что загруженный tarball никогда не устанавливается, даже если в нем есть файл setup.py.   -  person Luca    schedule 13.03.2019


Ответы (2)


Вы можете использовать dependency_links setup.py

i.e.

dependency_links =[https://github.com/GovindParashar136/spring-boot-web-jsp/tarball/master#egg=8138cc3fd4e11bde31e9343c16c60ea539f687d9]

В вашем случае адрес

https://github.com/facebookresearch/maskrcnn-benchmark/tarball/master#egg=5ec0b91cc85163ac3b58265b3f9b39bb327d0ba6
person IMParasharG    schedule 13.03.2019
comment
Итак, я попробовал следующее в ссылках на зависимости: файл https://github.com/facebookresearch/maskrcnn-benchmark/tarball/master#egg=5ec0b91cc85163ac3b58265b3f9b39bb327d0ba6-0.1'. The project has a setup.py`. Я вижу, что он загружается, но никогда не устанавливается. Нужно ли мне делать что-то еще, чтобы заставить его установить его? Я добавил 0.1, так как увидел, что это необходимо для добавления номера версии. - person Luca; 13.03.2019
comment
вы должны указать --process-dependency-links при использовании pip - person IMParasharG; 13.03.2019
comment
Я видел, что обработка ссылок зависимостей устарела. - person IMParasharG; 13.03.2019
comment
но я вызываю его как python setup.py build install. Так что не используйте pip напрямую из командной строки - person Luca; 13.03.2019
comment
Затем вы добавили install_requires=[ '5ec0b91cc85163ac3b58265b3f9b39bb327d0ba6-0.1' ], перед dependency_links - person IMParasharG; 13.03.2019
comment
Спасибо. По крайней мере, это пытается скомпилировать вещь. Итак, можно ли изменить порядок установки. Кажется, теперь он сначала обрабатывает зависимость, и порядок установки перепутался. Я отредактировал свой вопрос, чтобы отразить это. - person Luca; 13.03.2019
comment
Если ваша проблема решена, пожалуйста, примите мой ответ - person IMParasharG; 13.03.2019

Этот ответ предполагает, что добавление префикса package@ к URL-адресу git установит указанный коммит git:

# in setup.py
setup(
    # other fields
    install_requires=[
        "packagename@git+https://github.com/<user>/<repo>#<commit hash>",
    ],
)

так что в вашем случае:

# in setup.py
setup(
    # other fields
    install_requires=[
        "maskrcnn_benchmark@git+https://github.com/facebookresearch/maskrcnn-benchmark.git#5ec0b91cc85163ac3b58265b3f9b39bb327d0ba6",
    ],
)
person Simon Walker    schedule 20.07.2020