web-gelistirme-sc.com

ModuleNotFoundError: __main__ bir paket değil ne anlama geliyor?

Konsoldan bir modül çalıştırmaya çalışıyorum. Dizinimin yapısı şudur:

 enter image description here

p_03_using_bisection_search.py modülünü, problem_set_02 dizininden aşağıdakileri kullanarak çalıştırmaya çalışıyorum:

$ python3 p_03_using_bisection_search.py

p_03_using_bisection_search.pyis içindeki kod:

__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 __== '__main__':
    main()

p_02_paying_debt_off_in_a_year.py olan bir işlevi alıyorum, hangi kod:

__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 __== '__main__':
    main()

Aşağıdaki hatayı alıyorum:

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

Bu sorunun nasıl çözüleceği hakkında hiçbir fikrim yok. Bir __init__.py dosyası eklemeye çalıştım, ancak hala çalışmıyor.

84
lmiguelvargasf

Sadece göreceli içe aktarma için noktayı kaldırın ve şunları yapın:

from p_02_paying_debt_off_in_a_year import compute_balance_after
117
Moses Koledoye

Ben de seninle aynı sorunu yaşıyorum. Bence sorun göreceli içe aktarmayı in-package import içinde kullanmanızdır. Dizininizde __init__.py yok. Yani sadece Musa'nın cevapladığı gibi ithal edin. 

Sanırım asıl mesele şu gibi bir noktayla içe aktarırken:

from .p_02_paying_debt_off_in_a_year import compute_balance_after

Eşittir:

from __main__.p_02_paying_debt_off_in_a_year import compute_balance_after

Hepimiz biliyoruz ki __main__, şu anki modülünüz p_03_using_bisection_search.py ile ilgilidir. 

İşte sorun geliyor:

Tercüman p_03.py içine girdiğinde, komut dosyası eşittir: 

from p_03_using_bisection_search.p_02_paying_debt_off_in_a_year import compute_balance_after 

Görünüşe göre, p_03_using_bisection_searchp_02_paying_debt_off_in_a_year adında herhangi bir modül veya örnek içermiyor. 

Kısaca, tercüman rehber yapınızı bilmez.


Bu yüzden python çevre değerli eşyalarını değiştirmeden daha temiz bir çözüm buldum (göreli ithalatta nasıl istekleri yaptıklarını inceledikten sonra):

Dizinin ana mimarisi şudur:

main.py

setup.py

---problem_set_02/

------__init__.py

------p01.py

------p02.py

------p03.py

Sonra __init__.py yazınız:

from .p_02_paying_debt_off_in_a_year import compute_balance_after

Burada __main____init__, tam olarak problem_set_02 modülünü ifade eder.

Ardından main.py adresine gidin:

import problem_set_02

Ayrıca, çevreye belirli bir modül eklemek için bir setup.py yazabilirsiniz.

44
hcnhcn012

Merhaba Lütfen aşağıdaki adımı takip edin, bu sorunu çözeceksiniz . Dizin ve alt dizin oluşturduysanız, aşağıdaki adımları izleyin ve lütfen tüm dizinin tanınması için "init .py" olması gerektiğini unutmayın. Bir dizin olarak. 

  1. "sys alma" ve "sys.path" komutunu çalıştırdığınızda, python ile aranan tüm yolu görebileceksiniz. Mevcut çalışma dizininizi görebilmelisiniz. 

  2. Şimdi import komutunu kullanarak alt-dizini ve import ile kullanmak istediğiniz modülü aşağıdaki komutu uygulayın: "import subdir.subdir.modulename abc" ve şimdi bu modüldeki yöntemleri kullanabilirsiniz . ScreenShotforSameIssue

bu ekran görüntüsünde görebileceğiniz gibi bir tane üst dizine ve iki alt dizine sahibim ve ikinci alt dizine altında modül == CommonFunction .__ 'ya sahibim ve sys.path işleminden sonra sağ tarafı görüyorum.

2
Gaurav Singh

Olarak çalıştırmayı deneyin:

python3 -m p_03_using_bisection_search

1
Dan Keder