Comment référencer paquet python lorsque le nom de fichier contient une période de
Je suis à l'aide de django et j'ai un fichier nommé models.admin.py et je veux faire l'idée suivante dans models.py:
from "models.admin" import *
cependant, je reçois une erreur de syntaxe pour avoir des guillemets doubles. Mais si je ne l'
from models.admin import *
puis-je obtenir "ImportError: No module named admin"
Est-il possible de les importer à partir d'un fichier python qui a une période dans son nom?
- Bonjour BONJOUR ce qui est forçant vous avez un nom de fichier comme models.admin.py?? Pourquoi ne pas l'appeler models_admin.py ou models/admin.py ou tout autre chose qui s'accorde avec Django?
- S'il vous plaît ne pas le faire.
- Techniquement, c'est un module, pas un paquet.
Vous devez vous connecter pour publier un commentaire.
En fait, vous peut importer un module avec un nom non valide. Mais vous aurez besoin d'utiliser
imp
pour que, par exemple, en supposant que le fichier est nommémodels.admin.py
, vous pourriez faireMais lire les docs sur
imp.find_module
etimp.load_module
avant de commencer à l'utiliser.imp
est le mécanisme derrièreimport
et__import__
. Plus de flexibilité, mais nécessite plus de code. Rien de magique, si.importlib.machinery
, qui à mon humble avis est moyen plus d'ennuis que cela vaut la peine.Si vous vraiment le souhaitez, vous pouvez importer un module avec une inhabituelle nom de fichier (par exemple, un nom de fichier contenant un". "devant le".py') à l'aide de l'imp module:
Toutefois, c'est généralement une mauvaise idée. Il est plus probable que vous êtes en train d'utiliser les paquets, dans ce cas, vous devez créer un répertoire nommé "a", contenant un fichier nommé "b.py"; et puis "importer un.b" charge a/b.py.
load_source
est obsolète depuis au moins 1,5.Le fichier est appelé
models/admin.py
. (Source)Qui est, il doit être appelé
admin.py
dans un répertoire appelémodels
.Vous pouvez ensuite importer à l'aide de
from models.admin import *
, en supposant qu'il est dans votre Python path.Non, vous ne pouvez pas importer un fichier python en tant que module si son nom contient un point (ou un point d'interrogation ou un point d'exclamation, etc). Un module python est le nom (non compris .py) doit être valide, python nom (c'est à dire peut être utilisé comme un nom de variable).
Vous n'êtes pas le référencement fichiers dans l'instruction d'importation, vous faites référence à modules et paquets.
Veuillez lire la docs, ils sont très clairs sur cette question.
De toute façon, depuis que vous êtes à l'aide de django, l'approche habituelle ne fonctionne pas. Si vous souhaitez conserver des modèles dans des fichiers séparés, plutôt que dans models.py, vous devez prendre des mesures supplémentaires, décrites, par exemple, ici.
Edit:
Eh bien, je ne sais pas vraiment ce que l'questioneer moyens lorsqu'il évoque les admin et si oui ou non il est relié à l'interface d'admin de django. Mes points sont encore debout.
To support this, Python has a way to put definitions in a file and use them in a script or in an interactive instance of the interpreter. Such a file is called a module;