我有一个名为mimetypes的python模块,它与libx.something相关。这个mimetypes模块包装了python mimetypes模块,但仅限于魔术模块不存在的情况。但是,当我的应用程序导入'libx.something.mimetypes'并且该模块然后导入'mimetypes'时,它会相对于'libx.something'自行导入。
如何强制导入相对于python dist路径而不是当前模块路径工作,以便我可以导入python mimetypes模块?
File "/usr/local/lib/python2.7/dist-packages/libx/something/mimetypes.py", line 16, in get
return mimetypes.guess_type(path)
Error: 'module' object has no attribute 'guess_type'
但是...
$ python
Python 2.7.3 (default, Aug 1 2012, 05:16:07)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import mimetypes
>>> mimetypes.guess_type('a.txt')
('text/plain', None)
答案 0 :(得分:2)
使用:
from __future__ import absolute_import
在libx.something.mimetypes
模块中,或者给它一个不同的名称。
有关细节的详细信息,请参阅PEP 328 - Imports: Multi-Line and Absolute/Relative。在Python 2中,在搜索模块路径之前,首先相对于当前模块解析导入;除非使用新的相对导入语法(from . import mimetypes
等),否则使用上述语句导入始终绝对值。
该语句切换每个模块的导入行为 ;将其添加到libx.something.mimetypes
模块不会改变在其他模块中导入的行为。