J'ai cloné une bibliothèque python xyz
sur mon ordinateur. La structure du fichier est la suivante:
import sys sys.path.insert(0, './xyz_git') from xyz import Xyz instance = Xyz() print(instance.some_function())
Dans le main.py
>> project (folder) * main.py >> xyz_git (folder) >> xyz (folder)
Le problème est que je avoir le module xyz
installé par pip sur le python par défaut. Même si je supprime le dossier local, le de xyz import Xyz
fonctionnera toujours en raison de l'installation de pip par défaut. Comment puis-je m'assurer que si l'importation xyz
ne provient pas du répertoire local, cela donnera une erreur?
3 Réponses :
Si vous connaissez le chemin d'accès au répertoire local, insérez-le dans la première position du tableau sys.path avant d'essayer de l'importer.
Par exemple
import sys mypath = "ABS_PATH_TO_PROJECT_ROOT_DIR" sys.path.insert(0, mypath) from module import var
Si vous utilisez git, vous voudrez peut-être envisager de l'ajouter comme un sous-module git aussi.
Cela ne fonctionne pas, exactement le même comportement que mon code ci-dessus.
Si vous le pouvez, je vous recommande fortement d'utiliser un virtualenv pour organiser les dépendances de votre projet. De cette façon, vous n'aurez pas à planifier autour des packages de site du système python. virtualenv.pypa.io/en/latest
Ce n'est pas clair, mais la seule façon de le faire est de vérifier s'il y a un attribut dans votre xyz local dont vous savez qu'il ne se trouve pas dans le xyz installé. Voir l'exemple suivant:
main.py
import sys sys.path.insert(0, './xyz_git') import xyz try: xyz.foo except AttributeError as e: raise AttributeError('Local module xyz not installed!')
Cela ne fonctionne pas, exactement le même comportement que mon code ci-dessus.
La meilleure façon de procéder serait d'installer le package en mode développement comme réponse acceptée à mentionne cette question .
donc dans le contexte de cette question:
$ virtualenv dev_env $ source dev_env/bin/activate
rechargera le paquet dans pip pour que pip fasse référence le package local. Pour vous assurer que vous pouvez vérifier le chemin dans pip:
import xyz correctLocation = "ABS_PATH_TO_PROJECT_ROOT_DIR/xyz_git/" assert correctLocation == os.path.abspath(xyz.__file__))
Bien sûr, "emplacement correct" devra correspondre au chemin d'importation absolu, mais si vous avez installé corrrectl en mode dev, cela devrait pas de problème.
Comme mentionné ci-dessus, je recommanderais également fortement d'utiliser des environnements virtuels pour gérer les paquets installés.
$ cd ~/xyz_git/ $ pip install -e .
avant d'installer en mode de développement. p>
vous pouvez essayer:
depuis .xyz import Xyz