J'ai également publié une réponse similaire à la question concernant les importations à partir de paquets frères. Vous pouvez le voir ici .
Solution sans sys.path
hacks
Sommaire
- Enveloppez le code dans un dossier (par exemple
packaged_stuff
)
- Utilisez le
setup.py
script de création dans lequel vous utilisez setuptools.setup () .
- Pip installe le package dans un état modifiable avec
pip install -e <myproject_folder>
- Importer à l'aide
from packaged_stuff.modulename import function_name
Installer
Je suppose que la même structure de dossiers que dans la question
.
└── ptdraft
├── __init__.py
├── nib.py
└── simulations
├── __init__.py
└── life
├── __init__.py
└── life.py
J'appelle le .
dossier racine, et dans mon cas, il se trouve dans C:\tmp\test_imports
.
Pas
1) Ajoutez un setup.py
au dossier racine
Le contenu de la setup.py
peut être simplement
from setuptools import setup, find_packages
setup(name='myproject', version='1.0', packages=find_packages())
Fondamentalement, «tout» setup.py
fonctionnerait. Ceci est juste un exemple de travail minimal.
2) Utilisez un environnement virtuel
Si vous connaissez les environnements virtuels, activez-en un et passez à l'étape suivante. L'utilisation d'environnements virtuels n'est pas absolument requise, mais ils vous aideront vraiment à long terme (lorsque vous avez plus d'un projet en cours ..). Les étapes les plus élémentaires sont (exécutées dans le dossier racine)
- Créer un env virtuel
- Activer env virtuel
. /venv/bin/activate
(Linux) ou ./venv/Scripts/activate
(Win)
Pour en savoir plus à ce sujet, il suffit de Google sur "tutoriel python virtualenv" ou similaire. Vous n'avez probablement jamais besoin d'autres commandes que la création, l'activation et la désactivation.
Une fois que vous avez créé et activé un environnement virtuel, votre console doit donner le nom de l'environnement virtuel entre parenthèses
PS C:\tmp\test_imports> python -m venv venv
PS C:\tmp\test_imports> .\venv\Scripts\activate
(venv) PS C:\tmp\test_imports>
3) Pip installez votre projet dans un état modifiable
Installez votre package de niveau supérieur à l' myproject
aide de pip
. L'astuce consiste à utiliser l' -e
indicateur lors de l'installation. De cette façon, il est installé dans un état modifiable et toutes les modifications apportées aux fichiers .py seront automatiquement incluses dans le package installé.
Dans le répertoire racine, exécutez
pip install -e .
(notez le point, il signifie "répertoire courant")
Vous pouvez également voir qu'il est installé à l'aide de pip freeze
(venv) PS C:\tmp\test_imports> pip install -e .
Obtaining file:///C:/tmp/test_imports
Installing collected packages: myproject
Running setup.py develop for myproject
Successfully installed myproject
(venv) PS C:\tmp\test_imports> pip freeze
myproject==1.0
4) Importer en ajoutant mainfolder
à chaque importation
Dans cet exemple, le mainfolder
serait ptdraft
. Cela présente l'avantage que vous ne rencontrerez pas de collisions de noms avec d'autres noms de module (à partir de la bibliothèque standard python ou de modules tiers).
Exemple d'utilisation
nib.py
def function_from_nib():
print('I am the return value from function_from_nib!')
life.py
from ptdraft.nib import function_from_nib
if __name__ == '__main__':
function_from_nib()
Running life.py
(venv) PS C:\tmp\test_imports> python .\ptdraft\simulations\life\life.py
I am the return value from function_from_nib!