加载本地Python库
Python 2.7自带了一个叫做json的库。在我的PYTHONPATH中,我还添加了一些第三方的源代码,其中有一个也叫json的库。结果就是加载了错误的json库。那么,有什么好的方法可以避免这种情况呢?有没有办法让Python明确加载自带的库,比如用这种方式 from ? import json
?
2 个回答
2
在PYTHONPATH上,真的没有好的办法让多个模块使用相同的名字。这意味着你可能需要把第三方的json模块移动到一个不在PYTHONPATH上的地方,然后用其他方法来导入它。
最简单的办法就是把第三方的json模块放到它当前所在位置的一个子目录里,然后通过在这个子目录里添加一个叫做 __init__.py 的文件来把这个子目录变成一个模块。
如果你把这个新目录命名为'thirdparty',那么你就可以用 from thirdparty import json
来导入你的第三方json模块,而 import json
则总是会导入Python自带的json模块。
另外,你也可以把这个模块重命名为一个不会冲突的名字。
2
你可以试试
from path import json as anotherjson
这样可以解决命名空间冲突的问题。
另外,你还可以看看关于相对导入和绝对导入的讨论。
里面提到:
在Python 2.5中,你可以通过使用future模块中的absolute_import指令来切换导入的行为为绝对导入。这种绝对导入的行为将在未来的版本中成为默认设置(可能是Python 2.7)。一旦绝对导入成为默认,导入字符串将始终找到标准库的版本。建议用户尽可能多地使用绝对导入。
from __future__ import absolute_import
# from standard path
import json as _json
# from a package
from pkg import json as pkgjson
另一种方法是使用imp模块。
import imp
json = imp.load_source('json', '/path/to/json.py')