2

假设我的目录结构是:

C:\Scripts\myscript.py
C:\Scripts\customjson\json.py

myscript.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?

4

3 回答 3

2

尝试首先将您的 customjson 目录插入sys.path

sys.path.insert(0, os.path.join(os.path.dirname(sys.argv[0]), 'customjson'))
import json
于 2012-08-10T19:50:36.790 回答
0

你可以使用这样的东西:

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

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

于 2012-08-10T20:10:25.657 回答
0

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

这简单:

  1. __init__.py在您的 customjson 文件夹中创建一个名为的文件。如果您不想在包级别定义任何特殊内容,则该文件可以为空。
  2. 更改您的import声明以引用包中的模块(即import customjson.json)。
  3. 更改对模块的引用以使用完整路径 (customjson.json.whatever),或者进一步更改您的import语句以包含 asas子句 ( import customjson.json as json)。如果您使用from ... import ...语法,则这是不必要的。虽然使用as子句可能比重写您的访问更容易,但它可能会使任何其他阅读您的代码并期望它使用标准 json 模块的程序员感到困惑。

鉴于您在问题中描述的文件夹布局,如果您走这条路线,您根本不需要弄乱模块搜索路径,因为运行脚本的当前文件夹始终包含在路径中,这就是 customjson 包所在的位置位于。

于 2012-08-10T20:17:23.090 回答