Je développe un projet avec Python 3 et je voudrais l'emballer comme un module Python pour qu'il puisse être installé en tant que bibliothèque sur nos machines. Cependant, je suis un problème avec l'importation du module après l'installation alors laissez-moi vous montrer le codeImpossible de charger des classes à partir du module installé
├── README.txt
├── setup.py
├── virt_template
│ ├── debian
│ │ └── interfaces
│ ├── debian_platform.py
│ ├── __init__.py
│ ├── virt_template.py
│ └── test
│ ├── __init__.py
│ └── virt_template_test.py
Ceci est le contenu setup.py
from setuptools import setup, find_packages
setup(
name = "virt_template",
packages = find_packages(),
package_data = {"virt_template" : ["debian/*"]},
version = "1.0.0",
author = "Petr Mensik",
author_email = "[email protected]",
classifiers = [
"Programming Language :: Python",
"Programming Language :: Python :: 3",
"Intended Audience :: Developers",
"Operating System :: Linux",
"Topic :: Software Development :: Libraries :: Python Modules",
]
)
Maintenant, quand je lance python3 setup.py install
le module est correctement installé dans /usr/local/lib/python3.4/dist-packages/virt_template-1.0.0-py3.4.egg/virt_template
avec la structure de dossier comme ceci
├── debian
│ └── interfaces
├── debian_platform.py
├── __init__.py
├── virt_template.py
└── test
├── __init__.py
└── virt_template_test.py
Jusqu'ici tout va bien, cela me semble correct. Cependant quand je le fais
from virt_template import VirtualMachine
Je reçois cannot import name VirtualMachine
. J'ai donc essayé
from virt_template.virt_template import VirtualMachine
et le résultat est No module named 'debian_platform'
- qui fait probablement référence au fichier debian_platform.py
.
Alors qu'est-ce que je fais mal?
Merci pour votre réponse. Alors, que dois-je changer à propos de la structure du répertoire pour importer mon module comme 'import virt_template' –
Vous ne devriez pas changer la structure. Utilisez l'une des importations ci-dessus, soit le nom complet avec le nom du paquet devant ou relatif avec le point. Vous voudrez peut-être en savoir plus sur [importations relatives] (https://docs.python.org/2.5/whatsnew/pep-328.html). C'est la vie d'un développeur de paquets. Dans votre cas, vous avez choisi le nom du paquet comme le nom de votre module, ce qui rend votre importation plus mauvaise. Vous pouvez importer votre classe dans le plus haut __init__.py. Ensuite, il sera disponible au niveau du paquet. –
Ok, je l'ai résolu en collant le contenu de 'virt_template' directement dans le dossier avec le script' setup.py', merci de votre aide –