Import local packages in python
我已经浏览了很多关于这个的帖子,但仍然不起作用。这笔交易相当少。我有以下等级。
1 2 3 4 5 6 7 8 9 | main.py DirA/ __init__.py hello.py DirB/ __init__.py foo.py bla.py lol.py |
迪拉的"初始"是空的。DIRB的相应模块只包含foo模块。
1 | __all__.py = ["foo"] |
号
main.py有以下代码
1 2 3 4 5 6 | import DirA import DirB hey() #Def written at hello.py foolish1() #Def written at foo.py foolish2() #Def written at foo.py |
长话短说,我得到了名称错误:没有定义名称"foo"。有什么想法吗?事先谢谢。
你只得到你进口的东西。因此,在您的主目录中,您只得到
1 2 3 4 5 6 7 8 9 10 | import DirA DirA.something_in_init_py() # Importing hello: import DirA.hello DirA.hello.something_in_hello_py() # Using a named import: from DirA.hello import something_in_hello_py something_in_hello_py() |
在
但如果你好奇的话,它会这样工作:
1 2 | from DirB import * something_in_dirb() |
。
默认情况下,
编辑:关于初始化。
- 它的存在意味着该目录是一个包含多个模块的python包。如果它不存在,python将拒绝从目录中导入任何内容。
- 它将始终在加载目录中的其他内容之前加载。
- 它的内容将作为包本身提供。
试着把这个放在
1 | foo = 42 |
现在,你的主要观点是:
1 2 | from DirA import foo print(foo) # 42 |
。
它可能很有用,因为您可以在
1 2 3 | from myapp.author import Author from myapp.book import Book from myapp.review import Review |
。
显然不是最佳的。现在假设您在您的
1 | from myapp import Author, Book, Review |
python将加载
你试过这样的方法吗?单向
1 | from DirA import hello |
另一种方式
1 | from DirA.hello import hey |
号
如果这些不起作用,则附加一个新的系统路径
您需要导入函数本身:
如何从Python中的另一个文件调用函数?
在您的情况下:
1 | from DirA import foolish1, foolish2 |
。