我正在研究一个Django项目。我们称之为myproject
。现在,我的代码充斥着myproject.folder.file.function
。反正我是否可以删除所有导入前缀的必要性,如myproject.
?如果我想稍后重命名我的项目怎么办?当我从它导入的文件在同一个项目中时,我需要为这样的东西添加前缀,这让我感到很恼火。不应该是必要的。
答案 0 :(得分:5)
from myproject.folder import file
(可怕的名字,顺便说一句,践踏内置类型file
,但那是另一种咆哮;-),然后使用file.function
- if file
(gotta) 讨厌那个模块名称;-)对你来说还是太长了,添加例如对as fi
语句from
,并使用fi.function
。如果你想将myproject重命名为myhorror,你只需触摸from
语句来解决它(你可以使用相对导入,但那些会破坏2.5兼容性,因此暂时禁止你从App Engine - 太高了至少对我来说,为了方便而付出代价; - )。
编辑:如果几乎每个文件都需要一些给定的支持模块,这是确保支持模块位于sys.path上的目录(或zipfile)中的一个强有力的理由(它可能值得例如,即使只有30%的文件需要支持模块! - 。)。
答案 1 :(得分:3)
import x as y
import x.y as z
from x import y as z
“as”允许您为导入的模块指定自己的名称。例如,import os as System
允许您像这样调用os
模块的组件:
System.path.abspath('bla')
有关导入的详细信息,请阅读:Importing Python Modules
答案 2 :(得分:1)
如果你不介意破坏文件:
from myproject.folder import file
如果你想让文件更短:
import myproject.folder.file as f
如果您感觉非常喜欢,可以创建自己的import语句:
head = 'myproject.folder.'
def my_import(name,*args,**kwargs):
try:
return __import__(name, *args, **kwargs)
except ImportError:
return __import__(head+name, *args, **kwargs)
file = my_import('file')
你也可以是彻头彻尾的邪恶,并破解内置的python import语句:
head = 'myproject.folder.'
_import = __import__ # don't clobber __import__ yet
def my_import(name,*args,**kwargs):
try:
return _import(name,*args,**kwargs)
except ImportError:
return _import(head+name, *args, **kwargs)
__builtins__.__import__ = my_import # God just killed a maintainer
# elsewhere, after the above abomination has run:
import file # I hope you are happy.
实际上,我夸大了破坏内置函数的邪恶。没那么糟糕。但它有点毛茸茸。