0

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

4 回答 4

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 似乎也不是太不合理……)

于 2013-03-16T08:06:31.930 回答
0

另一种方法是从搜索路径中删除当前目录。假设(表示当前目录)位于(默认)""的开头:sys.path

sys.path.remove("")
import json
sys.path.insert(0, "")
于 2013-03-16T07:54:42.393 回答
0

你可以把这条线放在上面json.py

from __future__ import absolute_import

这将告诉 Python,在导入此模块时,它应该仅在 sys.path 上查找模块,而不是相对于它(另请参见http://www.python.org/dev/peps/pep-0328/#rationale-绝对进口)。

编辑:

另请注意,wadofstuff' 模块实际上并不直接导入 simplejson:from django.utils import simplejson. 如果您没有安装 simplejson , Django 代码将默认使用 stdlib 版本。

于 2013-03-16T08:05:35.217 回答
-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__()
于 2013-03-16T07:49:28.663 回答