Having Trouble with Import Statement in Python
我目前的项目结构是这样的。
1 2 3 4 5 6 7 8 9 10 11 | python/ __init__.py project_1/ __init__.py program_1.py project_2/ __init__.py program_2.py project_3/ __init__.py program_3.py |
我想从project_3/program_3.py导入一个名为info的类,它来自project_1/program_1.py和project_2/program_2.py。在我的程序_1.py和程序_2.py中,我尝试了以下不起作用的导入语句。
编辑-我通常"cd"到项目1中,然后从那里运行我的程序1.py。
1 2 3 4 5 6 7 8 9 10 11 12 13 | from project_3.program_3 import INFO Traceback (most recent call last): File"./program_1.py", line 43, in <module> from project_3.program_3 import INFO ImportError: No module named 'project_3' from python.project_3.program_3 import INFO Traceback (most recent call last): File"./program_1.py", line 43, in <module> from python.project_3.program_3 import INFO ImportError: No module named 'python' |
号
我将类信息导入Program_1.py和Program_2.py的唯一方法是在Program_1和Program_2的文件夹中复制Program_3.py。我在程序1和程序2中的导入语句将变为:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | python/ __init__.py project_1/ __init__.py program_1.py program_3.py project_2/ __init__.py program_2.py program_3.py project_3/ __init__.py program_3.py from program_3 import INFO |
这很不方便,因为现在我必须在所有3个位置更新程序_3.py。假设我构建项目文件夹的方式很迟钝:
- 如何正确/最好地组织我的文件夹,以便我可以从Program_1/2.py调用Program_3.py?
- 如果我当前的结构没有任何问题,我如何正确地将INFO类导入到Program_1/2.py中?
我已经阅读了python文档,但它没有提到将类从一个子文件夹导入到另一个子文件夹。我还查看了另一个来自堆栈溢出的帖子,但它的结构与我的不一样。
更新1-重要的是要注意,我只是使用项目1/2作为文件夹来组织我的项目。我最初在所有文件夹中都有init.py,因为我不知道自己在做什么。在我的项目_1/program_1.py中,我要导入的唯一模块/包来自项目_3/program_3.py。例子:
1 2 3 4 5 6 7 8 | python/ project_1/ program_1.py project_2/ program_2.py project_3/ __init__.py program_3.py |
。
使用子模块时,需要使用相对导入。在提供的示例中,从
1 | from ..project_3 import program_3 |
然后可以使用
如果您的可执行文件在脚本之外,也就是说,示例中使用模块
如果部分
1 | python3 -m python.project_1.program_1 |
号
我希望这有帮助。
前面的解决方案提供了相同的错误。
我用sys找到了一个修复方法:
1 2 3 4 5 | import sys sys.path.append('../') from project_3 import program_3 ... |
这样,就可以设置"python"文件夹作为引用(在本例中,它是父文件夹,但可以选择所需的路径)。
希望能有所帮助,