当文件名包含句点时如何引用python包
我正在使用 django,并且有一个名为 models.admin.py 的文件,我想在 models.py 中执行以下操作:
from "models.admin" import *
但是,由于使用双引号,我收到语法错误。但如果我这样做
from models.admin import *
,就会得到“ImportError:没有名为 admin 的模块”
有没有办法从名称中包含句点的 python 文件导入?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
实际上,您可以导入具有无效名称的模块。但是您需要使用
imp
,例如假设文件名为models.admin.py
,您可以这样做但是请阅读
imp.find_module
和imp.load_module
在开始使用之前。Actually, you can import a module with an invalid name. But you'll need to use
imp
for that, e.g. assuming file is namedmodels.admin.py
, you could doBut read the docs on
imp.find_module
andimp.load_module
before you start using it.如果您确实想要,您可以使用 imp 模块导入具有不寻常文件名的模块(例如,在“.py”之前包含“.”的文件名):
但是,这通常是一个不好的方法主意。您更有可能尝试使用包,在这种情况下,您应该创建一个名为“a”的目录,其中包含一个名为“b.py”的文件;然后“import ab”将加载a/b.py。
If you really want to, you can import a module with an unusual filename (e.g., a filename containing a '.' before the '.py') using the imp module:
However, that's generally a bad idea. It's more likely that you're trying to use packages, in which case you should create a directory named "a", containing a file named "b.py"; and then "import a.b" will load a/b.py.
该文件名为
models/admin.py
。 (来源 )也就是说,它应该在名为
models
的目录中名为admin.py
。然后,您可以使用
from models.admin import *
进行导入,假设它位于您的 Python 路径中。The file is called
models/admin.py
. (Source)That is, it should be called
admin.py
in a directory calledmodels
.Then you can import using
from models.admin import *
, assuming that it is in your Python path.如下
假设 dir 结构如下:
**假设您要在 script.py 中导入 main.py **
您的 main.py 如下所示
您的 script.py 如下所示< /strong>
查看此要点
Like below
Assume dir structure is like this:
**assume you want to import main.py in script.py **
your main.py looks like below
your script.py looks like below
Check out this gist
不,如果 python 文件的名称包含句点(或问号、感叹号等),则无法将其作为模块导入。 python 模块的名称(不包括 .py)必须是有效的 python 名称(即可以用作变量名称)。
No, you can't import a python file as a module if its name contains a period (or a question mark, or exclamation mark, etc). A python module's name (not including the .py) must be a valid python name (ie can be used as a variable name).
就我而言,我使用的是
grafanalib
,文件名必须是xx.dashboard.py
,基于doc。但是,我确实想导入此文件以简化上传步骤。当我使用
import imp
时收到警告:这是使用
importlib
和pathlib
的简单演示:foo.bar.py
和main.py
位于同一个文件夹中。In my case, I am using
grafanalib
, and the filename has to bexx.dashboard.py
based on the doc. However, I do want to import this file to simplify the uploading step.I got warning when I use
import imp
:Here is the simple demo using
importlib
andpathlib
:foo.bar.py
andmain.py
are in the same foler.您在导入语句中引用的不是文件,而是模块和包。
请阅读 docs,他们对此非常清楚。
无论如何,由于你使用的是 django,通常的方法是行不通的。如果您想将模型保存在单独的文件中,而不是在 models.py 中,则必须采取额外的步骤,例如,此处。
编辑:
嗯,我实在不知道提问者提到admin是什么意思,是否与django的admin界面有关。我的观点仍然成立。
You are not referencing files in the import statement, you are referencing modules and packages.
Please read the docs, they are very clear on that matter.
Anyway, since you are using django, the usual approach won't work. If you want to keep models in separate files, rather than in models.py, you have to take extra steps, outlined, for example, here.
Edit:
Well, I don't really know what the questioneer means when he mentions admin and whether or not it is related to the admin interface of django. My points still stand.