看来,使用两个不同的进口实体PYTHONPATH
s是而不是相同的对象。从两条不同路径导入的类是不相等的?
我在我的代码中遇到了一个小问题,我想用一个小测试用例来解释它。
我创建的源代码树:
a/
__init__.py
b/
__init__.py
example.py
在example.py:
class Example:
pass
,并从文件夹a
的父母,我运行Python和这个测试:
>>> import sys
>>> sys.path.append("/home/marco/temp/a")
>>>
>>> import a.b.example as example1
>>> import b.example as example2
>>>
>>> example1.Example is example2.Example
False
所以问题是:为什么结果是False
?即使通过两条不同路径导入,类也是一样的。如果这个类是一个自定义的异常,并且你试图用except
来捕捉它,这是一个完全的混乱。
测试用蟒3.4.3
'当你导入一个模块时,Python会检查sys.modules,看看在指定路径上的模块是否已经存在。问题是真正的模块路径确实是一样的,它的'PYTHONPATH'不同。由于我使用python3不允许输入''',我认为真正的路径可以而且应该被检查。 –
不是文件路径,模块路径,即此处为'a.b.example'或'b.example'的模块的名称。两个不同的名称,两个不同的模块。 – Duncan