web-dev-qa-db-fra.com

Comment puis-je installer des packages hébergés dans un PyPI privé en utilisant setup.py?

J'essaie d'écrire le setup.py fichier d'installation pour un projet privé, qui a des dépendances publiques et privées. Les publics sont hébergés sur PyPI, tandis que les privés sont hébergés sur un serveur exécutant simplepypi .

Je souhaite que les dépendances publiques et privées soient résolues et récupérées lors de l'installation.

J'ai donc ajouté mes dépendances à setup.py:

setup(
    ...
    install_requires = [
        # public dependencies
        'argparse==1.2.1',
        'beautifulsoup4==4.1.3',
        'lxml==3.1.0',
        'mongoengine==0.8.2',
        'pymongo==2.5.2',
        'requests==1.1.0',
        'Cython==0.18',
        # private dependencies
        'myprivatepackage1',
        'myprivatepackage2'
    ],
    dependency_links=['http://pypi.myserver.com/packages'],
    ...
)

Je compile l'archive tar du package à l'aide de la commande python setup.py sdist et l'installer dans un virtualenv activé à l'aide de pip install --verbose path/to/tarball.tar.gz.

Cependant, les lignes de journal pip ne mentionnent nulle part mon serveur PyPI privé, et https://pypi.python.org/simple/ semble avoir été interrogé deux fois.

Running setup.py Egg_info for package from file:///home/b/code/mapado/mypackage/dist/mypackage-0.5.1.tar.gz
    running Egg_info
    creating pip-Egg-info/mypackage.Egg-info
    writing requirements to pip-Egg-info/mypackage.Egg-info/requires.txt
    writing pip-Egg-info/mypackage.Egg-info/PKG-INFO
    writing top-level names to pip-Egg-info/mypackage.Egg-info/top_level.txt
    writing dependency_links to pip-Egg-info/mypackage.Egg-info/dependency_links.txt
    writing manifest file 'pip-Egg-info/mypackage.Egg-info/SOURCES.txt'
    warning: manifest_maker: standard file '-c' not found

    reading manifest file 'pip-Egg-info/mypackage.Egg-info/SOURCES.txt'
    reading manifest template 'MANIFEST.in'
    writing manifest file 'pip-Egg-info/mypackage.Egg-info/SOURCES.txt'
Downloading/unpacking myprivatepackage (from mypackage==0.5.1)
  Could not fetch URL https://pypi.python.org/simple/myprivatepackage/: HTTP Error 404: Not Found (myprivatepackage does not have any releases)
  Will skip URL https://pypi.python.org/simple/myprivatepackage/ when looking for download links for myprivatepackage (from mypackage==0.5.1)
  Could not fetch URL https://pypi.python.org/simple/myprivatepackage/: HTTP Error 404: Not Found (myprivatepackage does not have any releases)
  Will skip URL https://pypi.python.org/simple/myprivatepackage/ when looking for download links for myprivatepackage (from mypackage==0.5.1)
  Could not find any downloads that satisfy the requirement myprivatepackage (from mypackage==0.5.1)
Cleaning up...

Qu'est-ce que je rate?

Merci beaucoup!

22
Balthazar Rouberol

il semble que vous n'ayez pas spécifié votre hôte comme le doc de simplepy a dit que vous devez configurer votre ~/.pipyrc avec le bon nom d'hôte comme

Pour l'utiliser, exécutez "simplepypi". Vous pouvez télécharger des packages par:

Modify your ~/.pypirc so it looks like:

    [distutils]
    index-servers =
        pypi
        local

    [local]
    username: <whatever>
    password: <doesn't matter, see above>
    repository: http://127.0.0.1:8000

    [pypi]
    ...

alors vous allez y télécharger votre package

python setup.py sdist upload -r local

et pourrait l'installer à partir de là

pip install -i http://127.0.0.1:8000/pypi <your favorite package>

J'espère que cela vous aidera.

17
user1593705

dependency_links est ignoré par défaut (au moins dans pip 9.0.1)

Pour qu'il atteigne votre serveur, vous devez ajouter --process-dependency-links

Je crois pip 10 apportera un nouveau mécanisme , mais pour l'instant cela a fait fonctionner pour moi

J'ai également dû mettre à jour dependency_links pour inclure le nom du package, par exemple:

dependency_links=[
    "http://internal-pyp:5678/simple/your_package_name"
]
0
r89m