pip install_requires клонов из репозитория git, но содержимое репозитория отсутствует - PullRequest
1 голос
/ 22 января 2020

Мне нужно установить зависимость из частного git репозитория. Похоже, pip install -e. работал нормально, но содержимое хранилища отсутствует.

Мой setup.py содержит:

from setuptools import setup, find_packages

setup(
    name="",
    packages=find_packages(),
    include_package_data=True,
    install_requires=[
        "db@git+ssh://private_repo_git_path@master#egg=1.0.0"
    ]
)

Я запускаю установку с venv\Scripts\pip install -e . (windows)

Installation logs says:
Collecting db@ git+ssh://private_repo_git_path@master#egg=1.0.0
  Cloning ssh://****@private_repo_git_path (to revision master) to c:\users\...\appdata\local\temp\pip-install-lobhunuh\db
  Running command git clone -q 'ssh://****@private_repo_git_path' 'C:\Users\...\AppData\Local\Temp\pip-install-lobhunuh\db'

...

Installing collected packages: ..., db, ...
    Running setup.py install for db ... done
    ...

Пожалуйста, есть идеи, что я делаю не так?

Ответы [ 2 ]

1 голос
/ 25 февраля 2020

Несмотря на то, что более новые версии Python 3 могут импортировать каталоги без файла __init__.py в виде пакетов, эти каталоги по-прежнему необходимо добавлять в дистрибутивы Python проектов.

В этом case setuptools отвечает за упаковку, а функция find_packages отвечает за автоматический поиск пакетов. Но, насколько я знаю, эта функция обнаруживает только пакеты, основываясь на наличии файла __init__.py в каталогах. Каталоги без такого файла затем либо не добавляются в дистрибутивы проекта, либо не устанавливаются (не совсем уверен, что это).

Возможно, попробуйте setuptools find_namespace_packages вместо. Эта функция, по-видимому, предназначена для рассмотрения любого каталога, содержащего хотя бы один файл Python, как пакета, даже без обычного файла __init__.py. Который, очевидно, может иметь побочные эффекты, например, каталог test не должен быть пакетом, установленным вместе с проектом, даже если он содержит код Python.

С моей точки зрения, нет большой недостаток в добавлении файлов __init__.py в любом случае, так что это моя рекомендация.

1 голос
/ 25 февраля 2020

Наконец-то я выяснил, в чем проблема. В пакете зависимостей не было файла __init__.py. Добавив файл в папку пакета root, pip правильно установил пакет как зависимость в папку venv\Lib\site-packages.

Python> = 3 не требует __init__.py для обработки папки как пакет. Я не думал, что Пип справится с этим иначе.

...