Question
J'ai installé un package local appelé credentials
en utilisant
pip install -e c:\users\worker\src\clockwork\lib\credentials
Mais lorsque j'essaie d'importer le package à partir d'un répertoire frère, il échoue avec un ImporError:
cd c:\users\worker\src\clockwork\bank
python -c "import credentials"
...
ImportError: No module named 'credentials'
De façon confuse, le package credentials
est répertorié comme installé avec succès comme indiqué lorsque j'exécute pip list
:
...
credentials (1.0.0, c:\users\worker\src\clockwork\lib\credentials)
...
Comment puis-je installer mon package local afin qu'il puisse être importé?
Contexte
J'utilise Python 3.4 (32 bits). Le paquet contient deux fichiers:
credentials\__init__.py
credentials\setup.py
Le __init__.py
le fichier définit une seule fonction. Le setup.py
le fichier est court:
from distutils.core import setup
setup(name='credentials', version='1.0.0')
Solution
J'ajoute actuellement le répertoire contenant le package (c:\users\worker\src\clockwork\lib
) à ma variable PATH
comme solution de contournement. Mais ma question est de savoir comment installer le package correctement afin que je n'ai pas besoin de modifier le PATH
.
Le problème est centré sur setup.py
. Il doit déclarer un package:
from distutils.core import setup
setup(name='credentials', version='1.0.0', packages=['credentials'])
Mais ça setup.py
doit être dans le répertoire parent du package credentials
, donc à la fin, la structure du répertoire est:
...\credentials\setup.py
...\credentials\credentials\__init__.py
Avec cette modification, le module est trouvé après la réinstallation du package.
Cela pourrait également être causé par deux Python installations (mais ce n'était pas mon cas), et @Mr_and_Mrs_D donne une réponse pour ce cas.
Désinstallez le package python puis installez-le en utilisant:
python -m pip install -e c:\users\worker\src\clockwork\lib\credentials
Ce qui se passe probablement, c'est que vous avez plusieurs installations python et pip est exécuté à partir d'une installation pendant que vous essayez d'utiliser le package d'une autre. Voir aussi: