当前位置:  开发笔记 > 编程语言 > 正文

ModuleNotFoundError:__main__不是包是什么意思?

如何解决《ModuleNotFoundError:__main__不是包是什么意思?》经验,为你挑选了2个好方法。

我试图从控制台运行一个模块.我的目录结构是这样的:

在此输入图像描述

我正在尝试运行模块p_03_using_bisection_search.py,从problem_set_02目录使用:

$ python3 p_03_using_bisection_search.py

里面的代码p_03_using_bisection_search.py是:

__author__ = 'm'


from .p_02_paying_debt_off_in_a_year import compute_balance_after


def compute_bounds(balance: float,
                   annual_interest_rate: float) -> (float, float):

    # there is code here, but I have omitted it to save space
    pass


def compute_lowest_payment(balance: float,
                           annual_interest_rate: float) -> float:

    # there is code here, but I have omitted it to save space
    pass    

def main():
    balance = eval(input('Enter the initial balance: '))
    annual_interest_rate = eval(input('Enter the annual interest rate: '))

    lowest_payment = compute_lowest_payment(balance, annual_interest_rate)
    print('Lowest Payment: ' + str(lowest_payment))


if __name__ == '__main__':
    main()

我正在导入一个函数,p_02_paying_debt_off_in_a_year.py其代码是:

__author__ = 'm'


def compute_balance(balance: float,
                    fixed_payment: float,
                    annual_interest_rate: float) -> float:

    # this is code that has been omitted
    pass


def compute_balance_after(balance: float,
                          fixed_payment: float,
                          annual_interest_rate: float,
                          months: int=12) -> float:

    # Omitted code
    pass


def compute_fixed_monthly_payment(balance: float,
                                  annual_interest_rate: float) -> float:

    # omitted code
    pass


def main():
    balance = eval(input('Enter the initial balance: '))
    annual_interest_rate = eval(
        input('Enter the annual interest rate as a decimal: '))
    lowest_payment = compute_fixed_monthly_payment(balance,
                                                   annual_interest_rate)
    print('Lowest Payment: ' + str(lowest_payment))


if __name__ == '__main__':
    main()

我收到以下错误:

ModuleNotFoundError: No module named '__main__.p_02_paying_debt_off_in_a_year'; '__main__' is not a package

我不知道如何解决这个问题.我试过添加一个__init__.py文件,但它仍然无法正常工作.



1> Moses Koledo..:

只需删除相对导入的点,然后执行以下操作:

from p_02_paying_debt_off_in_a_year import compute_balance_after


你解决了 为什么即使添加`__init __.py`,相对导入也不起作用?
@djvg-要修复PyCharm,您可以将根目录标记为源根
接受的答案对我不起作用.您是否可以通过添加简约示例设置来扩展答案?
这适用于我(在一个包内,即在同一个文件夹中有一个空的`__init __.py`),虽然我的PyCharm(2018.2.4)将其标记为"未解析的引用"并且无法自动完成导入.

2> 小智..:

我和你一样有同样的问题.我认为问题是你使用了相对导入in-package import.__init__.py您的目录中没有.所以只需按照摩西的回答进行导入.

我认为核心问题是当您使用点导入时,例如:

__main__.

它相当于:

p_03_using_bisection_search.py .

我们都知道,这p_03.py是指您当前的模块p_03_using_bisection_search.

问题出现了:

当解释器进入时p_02_paying_debt_off_in_a_year,脚本等于:

main.py

显然,setup.py不包含任何调用的模块或实例problem_set_02/.

简而言之,解释器不知道您的目录体系结构.


所以我提出了一个更清晰的解决方案,而没有更改python环境的贵重物品(在查询请求在相对导入中的工作方式)之后:

该目录的主要架构是:

__init__.py

p01.py

---p02.py

------p03.py

------__init__.py

------__main__

------__init__

然后写下problem_set_02:

from .p_02_paying_debt_off_in_a_year import compute_balance_after

main.pyimport problem_set_02,它正是指模块setup.py.

然后去in-package import:

__init__.py

您还可以编写一个__main__以向环境添加特定模块.

推荐阅读
乐韵答题
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有