2010-06-01 121 views
12

我在我的PYTHONPATH中的一个目录中有一个自定义模块,其名称与标准库模块的名称相同,所以当我import module_name时,该模块被加载。如果我想使用原始标准库模块,是否有任何方法可以强制Python从标准库而不是从PYTHONPATH目录中导入,而不必重命名自定义模块并将每个引用更改为指向新名称?从Python标准库而不是PYTHONPATH强制导入模块默认

+0

重命名你的模块有什么不好? – 2010-06-01 18:06:37

+0

它只会涉及到对数十个文件进行更改。这听起来像是最好的解决方案。 – jrdioko 2010-06-01 18:46:06

+0

你有'grep',所以不应该太难找到每一个并修复它们。 – 2010-06-01 21:15:23

回答

11

理想的解决方案将是您的模块中的标准库不重命名为。

您也可以switch absolute imports on如果您对Python的2.5+:

from __future__ import absolute_import 
+0

我将如何使用相对导入来获取标准库版本? – jrdioko 2010-06-01 18:10:09

+0

我误解了你的问题,编辑答案。 – 2010-06-01 18:19:51

+0

这实际上不会有帮助吗? – 2011-03-18 13:41:52

5

您可以选择您想用imp模块导入模块:

import imp 
mymodule = imp.load_module(name, file, pathname, description) 
9

不要。

如果您不小心选择了标准库模块名称,请更改模块名称以结束冲突。

+0

这可能是最好的解决方案,既不会在访问编码器中造成混淆,也不会导致导入已经不是相对导入的模块的行为在打开绝对导入时不会改变。 – 2011-03-18 13:44:25

-1

要做到这一点,最好的办法是把你的项目在一个目录让我们说“MyProject的”驻留在:

/home/me/myproject

做一个符号链接的myproject目录之一默认的Python路径,例如:

# ln -s /home/me/myproject /usr/local/lib/python2.7/dist-packages/myproject

现在,当你想在你的项目中导入一个模块只需打开一个python解释器。

>>> from myproject.mymodule import *

它会像魅力一样工作。

最后一件事,不要将您的项目命名为python路径中找到的项目,因此您在导入时不会遇到问题。

+0

更好的方法是使用'PYTHONPATH'。另外,不要使用'from x import *',因为它会使静态分析工具混淆不清,并且更难理解变量来自哪里。 – bfontaine 2017-01-14 21:33:06

相关问题