J'ai du mal à comprendre comment fonctionne l'importation de modules en Python (je ne l'avais jamais fait auparavant dans une autre langue).
Disons que j'ai:
myapp/__init__.py
myapp/myapp/myapp.py
myapp/myapp/SomeObject.py
myapp/tests/TestCase.py
Maintenant j'essaie d'obtenir quelque chose comme ça:
myapp.py
===================
from myapp import SomeObject
# stuff ...
TestCase.py
===================
from myapp import SomeObject
# some tests on SomeObject
Cependant, je fais définitivement quelque chose de mal, car Python ne peut pas voir que myapp
est un module:
ImportError: No module named myapp
Dans votre cas particulier, il semble que vous tentiez d'importer SomeObject
à partir des scripts myapp.py et TestCase.py. À partir de myapp.py, faites
import SomeObject
puisque c'est dans le même dossier. Pour TestCase.py, faites
from ..myapp import SomeObject
Cependant, cela ne fonctionnera que si vous importez TestCase à partir du package. Si vous voulez exécuter directement python TestCase.py
, vous devez jouer avec votre chemin. Cela peut être fait dans Python:
import sys
sys.path.append("..")
from myapp import SomeObject
bien que ce ne soit généralement pas recommandé.
En général, si vous voulez que d'autres personnes utilisent votre paquet Python, vous devez utiliser distutils pour créer un script d'installation. De cette façon, tout le monde peut installer votre paquet facilement en utilisant une commande comme python setup.py install
et il sera disponible partout sur leur ordinateur. Si vous êtes sérieux au sujet du paquet, vous pouvez même l'ajouter à l'index du paquet Python, PyPI .
La fonction import
recherche les fichiers dans votre env. PYTHONPATH. variable et votre répertoire local. Vous pouvez donc soit placer tous vos fichiers dans le même répertoire, soit exporter le chemin en tapant dans un terminal
export PYTHONPATH="$PYTHONPATH:/path_to_myapp/myapp/myapp/"
chemin d'exportation est un bon moyen. Une autre méthode consiste à ajouter un .pth à l’emplacement de votre site-packages . Sur mon Mac, mon python conserve les paquets de sites dans/Library/Python comme indiqué ci-dessous
/Library/Python/2.7/site-packages
J'ai créé un fichier appelé awesome.pth dans /Library/Python/2.7/site-packages/awesome.pth et dans le fichier, mettez le chemin suivant référant à mes modules
/opt/awesome/custom_python_modules
Tu peux essayer
from myapp.myapp import SomeObject
parce que le nom de votre projet est identique à myapp.py, ce qui lui permet de rechercher d'abord le document de projet
Dans votre premier répertoire myapp, vous pouvez ajouter un fichier setup.py et ajouter deux codes python dans setup.py.
from setuptools import setup
setup(name='myapp')
dans votre premier répertoire myapp en ligne de commande, utilisez pip install -e. installer le paquet
Dans mon cas, c’était la surprise de Windows vs Python, bien que les noms de fichiers Windows ne soient pas sensibles à la casse, l’importation Python le est Donc, si vous avez le fichier Stuff.py
, vous devez importer ce nom tel quel.
pip install
sous Windows 10 s'installera par défaut dans 'Program Files/PythonXX/Lib/site-packages', qui est un répertoire qui nécessite des privilèges d'administrateur. J'ai donc résolu mon problème par installation de pip en cours d'exécution en tant qu'administrateur (vous devez ouvrir l'invite de commande en tant qu'administrateur, même si vous êtes connecté avec un compte admin). En outre, il est plus sûr d'appeler pip depuis Python.
par exemple.python -m pip install <package-name>
au lieu depip install <package-name>