2012-08-10 56 views
2

假设我的目录结构是:如何导入自定义json模块而不是python 2.7中的默认模块?

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 

的事情是,我有一个包含json.py一个 “customjson” 文件夹我想要使​​用它,而不是Python 2.7自带的默认json包。我该怎么做才能让脚本使用“customjson”而不是标准的json?

+3

为什么你坚持要调用你的版本'json'呢? – jordanm 2012-08-10 19:49:20

+1

为了上帝的缘故,你的模块肯定应该有一个不同的名字! – heltonbiker 2012-08-10 19:49:52

+0

我正在尝试对旧版本的json模块使用自定义修改。如果有另一种方法我应该叫它,让我知道。我应该做出什么样的改变,使它成为一个不同的名字? – Rolando 2012-08-10 19:50:25

回答

2

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

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

重命名仍然是最好的主意。 – 2012-08-10 19:59:54

+0

这样做,谢谢。 – Rolando 2012-08-11 22:28:23

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 

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

0

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

这很容易:

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

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

相关问题