Comment inclure une bibliothèque qui n'est pas enregistrée dans PyPI mais qui est ouverte au public dans GitHub en tant que dépendance. De plus, un mémorandum des mesures à prendre lorsque «requirements.txt» est référencé à partir de «setup.py» est résumé.
requirements.txt Si l'URL du référentiel GitHub est https://github.com/rgmining/common requirements.txt contient
requirements.txt
-e git+https://github.com/rgmining/common.git#egg=rgmining_common-0.9.0
Écrivez comme ça. Après # egg =
, il semble être au format pip-tools
pour générer requirements.txt
Entrez la même chaîne de caractères que ci-dessus dans requirements.in
.
setup.py
Jusqu'à présent, setup.py
transmettait le contenu de requirements.txt
à ʻinstall_requires` comme indiqué ci-dessous.
setup.py
from setuptools import setup, find_packages
def load_requires_from_file(filepath):
with open(filepath) as fp:
return [pkg_name.strip() for pkg_name in fp.readlines()]
setup(
#Autres éléments omis
install_requires=load_requires_from_file("requirements.txt")
)
Si requirements.txt
contient une URL, améliorez-la un peu et ne listez que le nom du package.
setup.py
def take_package_name(name):
if name.startswith("-e"):
return name[name.find("=")+1:name.rfind("-")]
else:
return name.strip()
def load_requires_from_file(filepath):
with open(filepath) as fp:
return [take_package_name(pkg_name) for pkg_name in fp.readlines()]
Passez également la partie URL à l'argument de mot-clé dependency_link
de la fonction setup
.
setup.py
def load_links_from_file(filepath):
res = []
with open(filepath) as fp:
for pkg_name in fp.readlines():
if pkg_name.startswith("-e"):
res.append(pkg_name.split(" ")[1])
return res
setup(
#Autres éléments omis
install_requires=load_requires_from_file("requirements.txt"),
dependency_links=load_links_from_file("requirements.txt"),
)
Avec ce qui précède, si vous utilisez python setup.py test
etc., vous pouvez préparer un package à partir de GitHub et exécuter le test.