Python和从另一个包中导入

13 浏览
0 Comments

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, in 
    from 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, in 
    from ..one.first import FirstClass
ValueError: attempted relative import beyond top-level package

\n所以,我的问题是:在这种情况下如何导入?

0
0 Comments

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,并确保导入操作的成功。

0