使用绝对路径python导入json

时间:2013-03-16 07:38:32

标签: python

我在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?

谢谢。

4 个答案:

答案 0 :(得分:2)

最简单,也许是最好的解决方法(在Python 2.x中)是没有一个模块来影响顶级stdlib / site-packages模块的名称。

换句话说,将json.py重命名为其他内容。然后,您可以在重命名的文件中import json(或者,更好,tryImportError回退到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 simplejsonDjango 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__()