0

我有一个名为 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)
4

1 回答 1

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模块不会改变在其他模块中导入的行为。

于 2013-07-27T23:06:57.250 回答