3
votes

la roue d'installation python entraîne une erreur d'importation

Je voudrais faire une distribution binaire de roue, l'installer puis l'importer en python. Mes pas sont

  • Je crée d'abord la roue: python ./my_package/setup.py bdist_wheel
  • J'installe la roue: pip install ./dist/*.whl
  • J'essaye d'importer le package: python -c "import my_package"

Cela conduit à l'erreur: ImportError: Aucun module nommé 'my_package'

De plus, lorsque je fais pip list , le my_package est répertorié. Cependant, lorsque j'exécute which my_packge , rien ne s'affiche.

Quand j'exécute pip install ./my_package/ tout fonctionne comme prévu.

Comment pourrais-je construire et installer correctement une roue?

python version 3.5 pip version 10.1 roue version 0.31.1

MISE À JOUR:

Quand je regarde les fichiers dans my_package-1.0.0.dist-info, il y a une entrée inattendue dans top_level.txt . C'est le nom du dossier où j'ai couru python ./my_package/setup.py bdist_wheel in. Je crois que mon setup.py est cassé.

MISE À JOUR EN CE QUI CONCERNE LA RÉPONSE ACCEPTÉE: J'ai accepté la réponse ci-dessous. Pourtant, je pense qu'il vaut mieux simplement cd dans le répertoire du package. Le passage à un répertoire différent comme suggéré ci-dessous conduit à un comportement inattendu lors de l'utilisation de l'indicateur -d , c'est-à-dire le répertoire cible où enregistrer la roue. Ce serait relatif au répertoire spécifié dans le fichier setup.py.


2 commentaires

Avez-vous le module wheel ? roue d'installation pip


merci @rassar, oui, la roue est installée


3 Réponses :


1
votes

Si vous devez exécuter le script de configuration à partir d'un autre répertoire, assurez-vous de saisir le répertoire du projet dans le script.

from setuptools import setup

root = os.path.normpath(os.path.join(os.path.abspath(__file__), os.pardir))
os.chdir(root)

# or using pathlib (Python>=3.4):
import patlib
root = pathlib.Path(__file__).parent
os.chdir(str(root))

setup(...)


0 commentaires

2
votes

J'ai eu la même erreur, mais c'était dû au fait que mon setup.py ne spécifiait pas l'entrée "packages = setuptools.find_packages ()". Everythings se construit bien sans cela, mais vous ne pouvez rien importer même si pip montre qu'il est installé.


0 commentaires

0
votes

Dans mon cas, pour le résoudre, je devais juste mettre à jour pip (puisque Docker a installé pip 9).

python3 -m pip install --upgrade pip


0 commentaires