我在django 1.5上使用了wadofstuff的序列化程序https://pypi.python.org/pypi/wadofstuff-django-serializers。但是,它使用的是simplejson,现在已弃用,所以我必须直接进入库文件wadofstuff/django/serializers/json.py
并将simplejson更改为json。问题是我不能import json
因为库文件也被命名为json.py
,所以它试图加载自己。我不想更改文件名,因为我团队中的其他开发人员肯定会杀了我。有没有办法从绝对路径导入json?
谢谢。
答案 0 :(得分:2)
最简单,也许是最好的解决方法(在Python 2.x中)是没有一个模块来影响顶级stdlib / site-packages模块的名称。
换句话说,将json.py
重命名为其他内容。然后,您可以在重命名的文件中import json
(或者,更好,try
,ImportError
回退到simplejson
,这样您就不会破坏2.5兼容性)。然后只需更改导入serializers.json
的任何代码即可导入新内容。
您应该能够针对wadostuff软件包提交错误,并提交您的补丁,它可能会进入1.2版本。 (似乎有一年左右的更新,并且最终在2013年最终加速使用Python 2.6和Django 1.5似乎并不太合理......)
答案 1 :(得分:0)
另一种方法是从搜索路径中删除当前目录。
假设""
(表示当前目录)位于sys.path
的开头(默认值):
sys.path.remove("")
import json
sys.path.insert(0, "")
答案 2 :(得分:0)
您可以将此行置于json.py
:
from __future__ import absolute_import
这将告诉Python,在导入此模块时,它应该仅在sys.path上查找模块而不是相对于它(参见http://www.python.org/dev/peps/pep-0328/#rationale-for-absolute-imports)。
编辑:
另请注意,wadofstuff
模块实际上并未直接导入simplejson:from django.utils import simplejson
。 Django code默认使用stdlib版本如果你没有安装simplejson。
答案 3 :(得分:-1)
1,尝试更改python的import-path:
sys.path.insert(0, "/path/to/your/json.py/dir")
import json
2,尝试将_ _ init _ _.py文件添加到你的json.py的所有目录中,然后就可以使用了这个
import a.b.c.json as myjson
3,如果你不想改变任何一点,尝试深入了解
__import__()