对于Python3.4:如何编写从任何范围工作的导入模块语句?

对于Python3.4:如何编写从任何范围工作的导入模块语句?,python,import,packages,python-3.4,Python,Import,Packages,Python 3.4,总结: 当从immediate包外的另一个模块导入时,当_name__==__main_uuu停止工作时,使用相同的导入语句。如果我修复它,使其在导入时工作,那么当_uname__u==_umain_u;时,它将停止工作。对于这些冲突的范围,是否有一个双赢的解决方案 更详细地说: 假设我有以下系统布局 package/ __init__.py outer_module.py subpackage/ __init__.py inner_mod

总结:

当从immediate包外的另一个模块导入时,当_name__==__main_uuu停止工作时,使用相同的导入语句。如果我修复它,使其在导入时工作,那么当_uname__u==_umain_u;时,它将停止工作。对于这些冲突的范围,是否有一个双赢的解决方案

更详细地说:

假设我有以下系统布局

package/
    __init__.py
    outer_module.py
    subpackage/
        __init__.py
        inner_module_1.py
        inner_module_2.py
假设除以下两个模块外,所有模块都为空

# inner_module_1
import inner_module_2
&

如果运行内部模块1,则没有错误

如果运行外部_模块,则从内部_模块_1获得以下信息

虽然此更改允许外部_模块在没有错误的情况下运行,但现在运行内部_模块_1(以前运行时没有错误)会引发以下错误

Traceback (most recent call last):
File "C:\package\subpackage\inner_module_1.py", line 1, in <module>
import subpackage.inner_module_2
ImportError: No module named 'subpackage'
下面是我的问题

当外部_模块访问内部_模块_1时,与在内部_模块_1中运行时,内部_模块_1中的import语句的解释是否不同?如果是,如何解释

我是否可以在内部模块1中编写一条导入语句,该语句在运行内部模块1和运行外部模块时都有效,如果可以,该语句是什么

谢谢


Victor

不要试图将模块作为可执行文件运行,而是使用python-msubpackage.inner_module_1运行它们。您还可以使用from。导入内部模块\u 2向您提供建议。由于缺乏替代方案,我可能被迫不运行单个模块,但如果是这样,我想知道原因。这是什么固有的不可能/不切实际。我尝试使用相对导入运行内部模块1,并收到以下错误。系统错误:未加载父模块,无法执行相对导入。它不是package.subpackage.internal_module_1吗?根据您的模块设计?@PsyKzz,如果我在外部_模块中写入import package.subpackage.internal_module_1,我在运行外部_模块时收到以下错误。ImportError:没有名为“package”的模块
Traceback (most recent call last):
File "C:\package\outer_module.py", line 1, in <module>
import subpackage.inner_module_1
File "C:\package\subpackage\inner_module_1.py", line 1, in <module>
import inner_module_2
ImportError: No module named 'inner_module_2'
# inner_module_1
import subpackage.inner_module_2
Traceback (most recent call last):
File "C:\package\subpackage\inner_module_1.py", line 1, in <module>
import subpackage.inner_module_2
ImportError: No module named 'subpackage'