如何导入自定义json模块而不是python 2.7中的默认模块?

如何导入自定义json模块而不是python 2.7中的默认模块?,python,json,Python,Json,假设我的目录结构为: C:\Scripts\myscript.py C:\Scripts\customjson\json.py python脚本的顶部有: sys.path.append(os.path.join(os.path.dirname(sys.argv[0]), 'customjson')) import json 问题是,我有一个“customjson”文件夹,其中包含一个json.py,我想用它来代替Python 2.7附带的默认json包。如何使脚本使用“customjson

假设我的目录结构为:

C:\Scripts\myscript.py
C:\Scripts\customjson\json.py
python脚本的顶部有:

sys.path.append(os.path.join(os.path.dirname(sys.argv[0]), 'customjson'))
import json

问题是,我有一个“customjson”文件夹,其中包含一个json.py,我想用它来代替Python 2.7附带的默认json包。如何使脚本使用“customjson”而不是标准json?

尝试首先在
sys.path中插入customjson目录:

sys.path.insert(0, os.path.join(os.path.dirname(sys.argv[0]), 'customjson'))
import json

您可以使用以下内容:

import sys
_orig_path = sys.path
sys.path = ["C:\Scripts\customjson"]
import json
sys.path = _orig_path
但是,当然,这些代码是不可移植的。为了便于携带,您可以使用:

import sys, os
_orig_path = sys.path
sys.path = [
    os.path.abspath(os.path.join(os.path.dirname(__file__), "customjson")),
]
import json
sys.path = _orig_path
或者,您可以将
json.py
重命名为,例如,
json2.py
。然后导入它:

import json2
或者,如果您确实需要将其命名为
json

import json2 as json

…是的,第二个看起来更好,不是吗?

我说:让你的
customjson
文件夹成为一个文件夹

这很简单:

  • 在customjson文件夹中创建一个名为
    \uuuu init\uuuu.py
    的文件。如果不希望在包级别定义任何特殊内容,则文件可以为空
  • 更改
    import
    语句以引用包中的模块(即
    import customjson.json
  • 更改对模块的引用以使用完整路径(customjson.json.where),或者进一步更改
    import
    语句以包含as
    as
    子句(
    import customjson.json as json
    )。如果您正在使用来自的
    。。。导入…
    语法,这是不必要的。虽然使用
    as
    子句可能比重写访问更容易,但它可能会使任何其他读取您的代码并希望它使用标准json模块的程序员感到困惑

  • 考虑到您在问题中描述的文件夹布局,如果您选择此路线,则根本不需要修改模块搜索路径,因为运行脚本的当前文件夹始终包含在路径中,而customjson包就位于该路径中。

    为什么还要坚持将您的版本称为“json”?看在上帝的份上,您的模块肯定应该有不同的名称!我正在尝试对旧版本的json模块进行自定义修改。如果有其他方法我应该叫它,让我知道。我应该做什么改变,使它成为一个不同的名称?重命名仍然是最好的主意。