Python和从另一个包中导入
Python和从另一个包中导入
我的Python版本是3.5。\n我有一个项目的结构如下:\n
-- test ---- __init__.py ---- one ------ __init__.py ------ first.py ---- two ------ __init__.py ------ second.py
\nfirst.py
文件的内容:\n
class FirstClass(object): def hello(self): return 'hello'
\nsecond.py
文件的内容:\n
def main(): first = FirstClass() print(first.hello()) if __name__ == '__main__': main()
\n问题是我无法在second.py
中导入FirstClass
,我尝试了:\n
from test.one.first import FirstClass 结果: Traceback (most recent call last): File "second.py", line 3, infrom test.one.first import FirstClass ModuleNotFoundError: No module named 'test.one'
\n我还尝试了这种方法:\n
from ..one.first import FirstClass 结果: Traceback (most recent call last): File "second.py", line 3, infrom ..one.first import FirstClass ValueError: attempted relative import beyond top-level package
\n所以,我的问题是:在这种情况下如何导入?
Python是一种非常流行的编程语言,可以通过导入其他包来扩展其功能。然而,有时在导入另一个包时会出现问题。本文将讨论导入其他包时出现问题的原因以及解决方法。
在给出的代码示例中,我们可以看到作者使用了一个hack来解决导入其他包时的问题。首先,作者定义了一个名为`main`的函数。然后,作者导入了`sys`和`os.path`模块,并将它们添加到了`path`列表中。接下来,作者使用`dirname`函数获取当前路径的父路径,并将其添加到`path`列表中。然后,作者将`__package__`设置为`"one"`,表示要导入的包是`one`。最后,作者从`one.first`包中导入了`FirstClass`类,并调用了`main`函数。
这个hack的原因是,当我们从另一个包中导入模块时,Python解释器需要知道要导入的包的路径。然而,在某些情况下,Python解释器无法正确地找到包的路径,导致导入失败。因此,作者使用了这个hack来手动添加包的路径,以确保导入成功。
解决这个问题的方法是使用正确的包路径。我们可以使用`sys.path`列表来查看Python解释器正在搜索的路径。如果我们的包不在这个列表中,我们就需要手动将其添加到`path`列表中。此外,我们还可以使用`__init__.py`文件来标记一个目录作为一个包。这个文件可以是空文件,但它必须存在于包的目录中。
当我们在Python中导入其他包时遇到问题时,可以使用hack来手动添加包的路径。然而,更好的解决方法是使用正确的包路径,并确保目录中包含一个`__init__.py`文件。这样可以避免使用hack,并确保导入操作的成功。