为啥不导入 Python [重复]

Posted

技术标签:

【中文标题】为啥不导入 Python [重复]【英文标题】:Why not import Python [duplicate]为什么不导入 Python [重复] 【发布时间】:2018-11-18 12:41:00 【问题描述】:

有这个app结构,其中myapp是根目录,“app”和“package1”两个并行包:

myapp

  app
     __init__.py
     app.py

  package1
     __init__.py
     my_file.py
 
  __init__.py

*注意:最后一个__init__.py位于根目录“myapp”

现在,在 app.py 中,如果我尝试 import my_file.py

from ..package1 import my_file as my_variable

然后我得到这个错误:

ImportError: attempted relative import with no known parent package

我在这里研究并找到了一个可能的解决方案:

How to resolve ImportError: attempted relative import with no known parent package

我想应用“解决方案 1”,但不明白我应该将 ma​​in.py 放在 哪里 以及它的 应该放在哪里>内部代码,或者相反,它可能是一个空文件,例如__init__.py

【问题讨论】:

【参考方案1】:

app.py 中应该有一个run 函数:

def run():
    # .... You code that should run as app

app.py中应该没有自动运行代码

main.py 应与myapp 位于同一文件夹中:

myapp
  app
     __init__.py
     app.py

  package1
     __init__.py
     my_file.py

  __init__.py
main.py

现在main.py 应该包含如下内容:

from myapp.app import app

app.run()

你可以运行它python main.py

您也可以将__main__.py 文件放在myapp 中:

myapp
  app
     __init__.py
     app.py

  package1
     __init__.py
     my_file.py

  __init__.py
  __main__.py

__main__.py 应该包含如下内容:

from .app import app

app.run()

你不能像这样运行它python -m myapp

【讨论】:

以上是关于为啥不导入 Python [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Python / ImportError:不支持按文件名导入[重复]

pandas库明明安装成功了,为啥总是导入错误?

python相对导入示例代码不起作用[重复]

为啥在c中嵌入python时不能导入'math'库?

为啥python导入pymysql后程序运行不了

如何在不重复导入***名称的情况下构造python包