[Python] Lorsque vous souhaitez importer et utiliser votre propre package dans le répertoire supérieur

Je veux importer et utiliser mon propre package dans le répertoire supérieur avec Python, mais je n'ai pas pu trouver de solution pour importer par chemin relatif ou ne pas vouloir changer sys.path dans le script, je vais donc l'écrire.

En conclusion, créez setup.py et utilisez la commande pip install -e ..

situation

Exemple de configuration d'annuaire:

project
+ mypackage
|  + __init__.py
|  + module_a.py
+ program_main
|  + executor
|    + executor.py
|  + tests
|    + executor_test.py

ʻJe veux importer et utiliser mon propre paquet appelé mypackage dans le dossier supérieur du point de vue de executor.py`.

Dans mon cas, il y avait plusieurs répertoires pour les services Lambda sur AWS et LambdaLayer a été placé dans un dossier de niveau supérieur en tant que processus commun, de sorte que LambdaLayer ne pouvait pas être importé correctement à partir des fonctions Lambda localement.

De plus, les services Lambda et la couche Lambda ont une structure de répertoires qui fonctionne correctement dans l'environnement déployé, et vous devez faire attention au chemin lorsque vous effectuez des tests unitaires avec CICD.

project
+ layers
|  + my_layer_1
|    + ...
|  + ...
+ lambda
|  + service_1
|    + handler.py
|    + serverless.yml
|    + requirements.txt
|    + env
|    + ...
|    + tests
|      + ...
|  + ...
+ setup.py

approche

Vous pouvez gérer les packages avec setup.py. Placez le setup.py suivant dans le répertoire racine.

from setuptools import setup, find_packages

setup(name='myproject', version='1.0', packages=find_packages())

find_packages () trouvera automatiquement le paquet où __init __. py existe. Si le chemin ne fonctionne pas ou n'est pas trouvé, vous pouvez jouer avec package_dir en plus de packages ou vérifier si __init __. Py existe.

Après cela, installez votre propre package en exécutant la commande suivante dans le répertoire racine.

pip install -e .

-e Référence

e, --editable <path/url>
Install a project in editable mode (i.e. setuptools “develop mode”) from a local project path or a VCS url.

Si vous spécifiez -e, lorsque vous éditez et enregistrez votre propre package, il reconnaîtra automatiquement les modifications, vous n'avez donc pas besoin de réinstaller votre propre package (pip install).

référence

https://stackoverflow.com/questions/17155804/confused-about-the-package-dir-and-packages-settings-in-setup-py

Recommended Posts

[Python] Lorsque vous souhaitez importer et utiliser votre propre package dans le répertoire supérieur
[Python] Lorsque vous souhaitez utiliser toutes les variables dans un autre fichier
Utilisez CASA Toolkit dans votre propre environnement Python
Je veux utiliser le jeu de données R avec python
Comment utiliser pyenv et pyenv-virtualenv à votre manière
Si vous souhaitez que vos collègues utilisent la même langue
[Sous-processus] Lorsque vous souhaitez exécuter un autre programme Python en code Python
Lorsque vous exécutez diff en python et que vous voulez à la fois le code de retour et la sortie
Utilisez facilement vos propres fonctions en Python
[Python] Empaquetez et distribuez vos propres modules
Comment utiliser is et == en Python
Lorsque vous souhaitez utiliser plusieurs versions de la même bibliothèque Python (environnement virtuel utilisant venv)
Remarque Python: lorsque vous souhaitez connaître les attributs d'un objet
Le nom du fichier était mauvais en Python et j'étais accro à l'importation
Si vous souhaitez compter les mots en Python, il est pratique d'utiliser Counter.
Comment utiliser la bibliothèque C en Python
Lorsque vous souhaitez mettre à jour le pilote Chrome.
Je souhaite utiliser le répertoire temporaire avec Python2
Importez vos propres modules avec le développement Python de Grasshopper
Je veux afficher la progression en Python!
Comment créer un environnement lorsque vous souhaitez utiliser python2.7 après l'installation d'Anaconda3
Je souhaite utiliser Python dans l'environnement de pyenv + pipenv sous Windows 10
Utilisez libsixel pour générer Sixel en Python et générer le graphe Matplotlib vers le terminal.
Je veux obtenir le nom du fichier, le numéro de ligne et le nom de la fonction dans Python 3.4
Il est pratique d'utiliser stac_info et exc_info lorsque vous souhaitez afficher la traceback dans la sortie du journal par journalisation.
Comment connaître le répertoire actuel en Python dans Blender
Essayez d'améliorer votre propre quiz d'introduction avec Python
[Réintroduction à python] Comment importer via le répertoire parent
% Et str.format () en Python. Lequel utilisez-vous?
[Road to Intermediate Python] Définissez dans votre propre classe
Appelez votre propre module python à partir du package ROS
Comment utiliser le modèle appris dans Lobe en Python
Lorsque vous voulez plt.save dans l'instruction for
Le langage de programmation que vous souhaitez pouvoir utiliser
Je veux faire quelque chose avec Python à la fin
Un mémo de fonction utile lorsque vous souhaitez entrer dans le débogueur si une erreur se produit lorsque vous exécutez un script Python.
Utilisez Python pour surveiller Windows et Mac et collecter des informations sur les applications sur lesquelles vous travaillez
[Django] Mémorandum lorsque vous souhaitez communiquer de manière asynchrone [Python3]
Commande de raccourci Jedi-vim qui vous permet de faire référence à la source de la définition et à la destination de la définition en Python
Je connais? Analyse de données à l'aide de Python ou de choses que vous souhaitez utiliser quand vous le souhaitez avec numpy
[Petite histoire] Une mesure minutieuse lorsque vous devez exécuter une fonction avant l'importation en Python
Comment importer des fichiers où vous le souhaitez en Python
[Introduction à l'application Udemy Python3 +] 36. Utilisation de In et Not
Utilisez aggdraw lorsque vous voulez dessiner magnifiquement avec un oreiller
[Python] Je souhaite utiliser l'option -h avec argparse
[Note] Importation de fichiers dans le répertoire parent en Python
Comparaison de l'utilisation des fonctions d'ordre supérieur dans Python 2 et 3
[Python3] Code qui peut être utilisé lorsque vous souhaitez redimensionner des images dossier par dossier
Je veux connaître la nature de Python et pip
Lorsque vous souhaitez utiliser python 2.x sur Gentoo Linux moderne
Si vous voulez mettre un argument dans la fonction de fermeture et l'exécuter plus tard
Lorsque vous souhaitez lancer une commande UNIX sur Python
Comment écrire quand on veut mettre un nombre après le numéro de groupe à remplacer par une expression régulière dans re.sub de Python
Introduction à l'utilisation de Pytorch Lightning ~ Jusqu'à ce que vous formatez votre propre modèle et le produisez sur tensorboard ~
Lorsque vous souhaitez remplacer plusieurs caractères dans une chaîne de caractères sans utiliser d'expressions régulières dans la série python3
Voulez-vous attendre un usage général avec Python Selenium?
traitement pour utiliser les données notMNIST en Python (et essayé de les classer)
[Python] Résolution du problème d'importation dû à la différence des points d'entrée