Определите зависимости setup.py от частного PyPI - PullRequest
3 голосов
/ 04 ноября 2019

Я бы хотел установить зависимости из моего частного PyPI, указав их в setup.py.

Я уже пытался указать, где найти зависимости в dependency_links следующим образом:

setup(
    ...

    install_requires=["foo==1.0"],
    dependency_links=["https://my.private.pypi/"],

    ...
)

Я также пытался определить весь URL-адрес в пределах dependency_links:

setup(
    ...

    install_requires=[],
    dependency_links=["https://my.private.pypi/foo/foo-1.0.tar.gz"],

    ...
)

, но когда я пытаюсь установить с помощью python setup.py install, ни один из них не работал для меня.

Кто-нибудь может мне помочь?

РЕДАКТИРОВАТЬ:

С первым фрагментом кода я получил эту ошибку:

...

Installed .../test-1.0.0-py3.7.egg
Processing dependencies for test==1.0.0
Searching for foo==1.0
Reading https://my.private.pypi/
Reading https://pypi.org/simple/foo/
Couldn't find index page for 'foo' (maybe misspelled?)
Scanning index of all packages (this may take a while)
Reading https://pypi.org/simple/
No local packages or working download links found for foo==1.0
error: Could not find suitable distribution for Requirement.parse('foo==1.0')

в то время как во втором случае я не получил никакой ошибки, просто следующее:

...

Installed .../test-1.0.0-py3.7.egg
Processing dependencies for test==1.0.0
Finished processing dependencies for test==1.0.0

ОБНОВЛЕНИЕ 1:

Я пытался изменить setup.py следуя инструкциям sinoroc. Теперь мой setup.py выглядит следующим образом:

setup(
    ...

    install_requires=["foo==1.0"],
    dependency_links=["https://username:password@my.private.pypi/folder/foo/foo-1.0.tar.gz"],

    ...
)

Я собрал библиотеку test с python setup.py sdist и попытался установить ее с pip install /tmp/test/dist/test-1.0.0.tar.gz, но я все еще получаю эту ошибку:

Processing /tmp/test/dist/test-1.0.0.tar.gz
ERROR: Could not find a version that satisfies the requirement foo==1.0 (from test==1.0.0) (from versions: none)
ERROR: No matching distribution found for foo==1.0 (from test==1.0.0)

Что касается частного PyPi, у меня нет никакой дополнительной информации, потому что я не являюсь ее администратором. Как видите, у меня просто есть учетные данные ( имя пользователя и пароль ) для этого сервера.

Кроме того, PyPi организован в подпапках https://my.private.pypi/folder/.. где зависимость, которую я хочу установить:

ОБНОВЛЕНИЕ 2:

Запустив pip install --verbose /tmp/test/dist/test-1.0.0.tar.gz, можно найти только 1 место, где искать библиотекуfoo, на общедоступном сервере https://pypi.org/simple/foo/, а не на нашем частном сервере https://my.private.pypi/folder/foo/.

Здесь вывод:

...

1 location(s) to search for versions of foo:
* https://pypi.org/simple/foo/
Getting page https://pypi.org/simple/foo/
Found index url https://pypi.org/simple
Looking up "https://pypi.org/simple/foo/" in the cache
Request header has "max_age" as 0, cache bypassed
Starting new HTTPS connection (1): pypi.org:443
https://pypi.org:443 "GET /simple/foo/ HTTP/1.1" 404 13
Status code 404 not in (200, 203, 300, 301)
Could not fetch URL https://pypi.org/simple/foo/: 404 Client Error: Not Found for url: https://pypi.org/simple/foo/ - skipping
Given no hashes to check 0 links for project 'foo': discarding no candidates
ERROR: Could not find a version that satisfies the requirement foo==1.0 (from test==1.0.0) (from versions: none)
Cleaning up...
  Removing source in /private/var/...
Removed build tracker '/private/var/...'
ERROR: No matching distribution found for foo==1.0 (from test==1.0.0)
Exception information:
Traceback (most recent call last):

...

1 Ответ

1 голос
/ 05 ноября 2019

Во второй попытке, я полагаю, у вас все равно должно быть foo==1.0 в install_requires.


Обновление

Имейте в виду, что pip в настоящее время не поддерживает dependency_links (хотя некоторые старые версии pip поддерживали его).

Для pip альтернативой является использование параметров командной строки, таких как - extra-index-url или - find-links . Эти параметры не могут быть применены к пользователю вашего проекта (в отличие от зависимых ссылок из setuptools ), поэтому они должны быть надлежащим образом задокументированы. Чтобы облегчить это, хорошей идеей является предоставление needs.txt file пользователям вашего проекта. Этот файл может содержать некоторые параметры pip, и, в частности, они могут быть указаны для каждой строки (то есть для каждого требования).

Например:

# requirements.txt
# ...
foo==1.0 --find-links 'https://my.private.pypi/'
# ...
...