我想用我自己的模块版本更新python包中的一个模块,具有以下条件:
import
引用原始包/模块的语句来解析我的本地模块这是我想用django的细节做的一个例子,因为这就是我出现这个问题的地方:
说这是我的项目结构
django/
... the original, unadulterated django package ...
local_django/
conf/
settings.py
myproject/
__init__.py
myapp/
myfile.py
Run Code Online (Sandbox Code Playgroud)
然后在myfile.py中
# These imports should fetch modules from the original django package
from django import models
from django.core.urlresolvers import reverse
# I would like this following import statement to grab a custom version of settings
# that I define in local_django/conf/settings.py
from django.conf import settings
def foo():
return settings.some_setting
Run Code Online (Sandbox Code Playgroud)
我可以用__import__
声明做一些魔术myproject/__init__.py
来完成这个吗?是否有更"pythonic"的方法来实现这一目标?
这是我觉得这很有意义的场景.
imports
所有要导入的应用程序mycustomsettings
.我想让可重用的应用程序幸福地无知我已经改变了django.conf.settings的实现.Tho*_*ard 15
只需在其他任何内容导入之前在sys.modules中设置条目:
import sys
import myreplacement
sys.modules["original"] = myreplacement
Run Code Online (Sandbox Code Playgroud)
然后,当某人"导入原始"时,他们将获得您的版本.
如果要替换子模块,可以这样做:
import sys
import thepackage
sys.modules["thepackage"].submodule = myreplacement
sys.modules["thepackage.submodule"] = myreplacement
Run Code Online (Sandbox Code Playgroud)
然后"from thepackage import submodule"或"import thepackage.submodule"将给出"myreplacement".
归档时间: |
|
查看次数: |
9951 次 |
最近记录: |