Je travaille sur une bibliothèque Python (pas de moi) qui ressemble à ceci:Comment empaqueter une bibliothèque dont l'importation produit des effets secondaires en Python?
.
├── README.md
├── setup.py
└── library
├── __init__.py
├── core.py
├── a.py
└── b.py
Le fichier __init__.py
faire usage de core.py
qui utilise lui-même a.py
et b.py
. La chose importante à noter est que import library
a quelques effets secondaires qui sont délibérément destinés.
Cependant, je voudrais donner à l'utilisateur la possibilité d'utiliser les fonctions de core.py
sans effets secondaires. Malheureusement, comme vous le savez, import library.core
ou from library import core
exécutera __init__.py
(où des effets secondaires se produisent) de toute façon.
Savez-vous comment j'ai pu réorganiser mon paquet et le setup.py
pour résoudre ce problème?
Je pensais à quelque chose comme ceci:
.
├── README.md
├── setup.py
├── library_core
│ ├── __init__.py
│ ├── core.py
│ ├── a.py
│ └── b.py
└── library
└── __init__.py # Import library_core and apply side effects
Je setup.py
jour avec packages = ['library', 'library_core']
. De cette façon, l'importation library
ne change rien, mais l'utilisateur peut alors importer library_core
sans effets secondaires. De plus, cela éviterait la duplication du code et tout resterait dans le même référentiel.
Malheureusement, cela ne fonctionne pas car je n'ai pas la possibilité d'importer library_core
de library
car ils ne sont pas au même endroit dans l'arborescence de fichiers.
* « Malheureusement, cela ne fonctionne pas parce que je n'ai pas la possibilité d'importer library_core de la bibliothèque » * - On dirait que c'est votre problème principal, que se passe-t-il lorsque vous essayez 'from library_core import core' dans' library/__ init __. py'? – Kos
@Kos En fait, cela pourrait fonctionner ... J'ai essayé d'abord avec 'de ..library_core import * 'qui a évidemment échoué, mais simplement' import library_core' fonctionnera ** une fois le paquet installé ** avec 'python setup.py install'. Je suppose que c'est la voie à suivre. Donc, je vais vider la question. – Delgan