Eu sunt încercarea de a rula un modul de consolă. Structura de directorul meu este asta:
Eu sunt încercarea de a rula modulul p_03_using_bisection_search.py", de la " problem_set_02
director folosind:
$ python3 p_03_using_bisection_search.py
Codul din interiorul p_03_using_bisection_search.py
este:
__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()
Sunt importatoare o funcție care este în p_02_paying_debt_off_in_a_year.py care este codul:
__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()
Primesc urmatoarea eroare:
ModuleNotFoundError: No module named '__main__.p_02_paying_debt_off_in_a_year'; '__main__' is not a package
Nu am nici o idee cum să rezolve această problemă. Am încercat adăugarea unui `init.py dosarul lui, dar nu este încă de lucru.
Am aceeasi problema ca si tine. Cred că problema este că ai folosit relativă de import în in-pachet de import
. Nu există nicioinit.py` în directorul dumneavoastră. Deci, doar importa ca Moise a răspuns de mai sus.
Problema de bază cred că este atunci când importați cu un punct:
``
from .p_02_paying_debt_off_in_a_year import compute_balance_after
``
Acesta este echivalent cu:
din __main__.p_02_paying_debt_off_in_a_year import compute_balance_after
unde __principal__
se referă la modul curent p_03_using_bisection_search.py
.
Pe scurt, interpretul nu știu directorul cu firme de arhitectura.
Atunci când interpretorul ia în p_03.py`, script-ul este egal cu:
din p_03_using_bisection_search.p_02_paying_debt_off_in_a_year import compute_balance_after
și p_03_using_bisection_search
nu conține nici o module sau instanțe numit p_02_paying_debt_off_in_a_year
.
Așa că am venit cu un cleaner soluție, fără a schimba python mediu de obiecte de valoare (după ce se uită în sus cât cereri se face în raport de import):
Arhitectura de bază al directorului este:
main.py
setup.py
---problem_set_02/
------__init__.py
------p01.py
------p02.py
------p03.py
Apoi scrie în __init__.py
:
de la .p_02_paying_debt_off_in_a_year import compute_balance_after
Aici __main__ "este" __init__
, mai exact se referă la modul problem_set_02
.
Apoi du-te la main.py
:
import problem_set_02
Puteți scrie, de asemenea, un setup.py` pentru a adăuga modul specific pentru mediu.
Hi, vă Rugăm să urmați pas de mai jos, veți rezolva această problemă.
Dacă ați creat director și sub-director, apoi urmați pașii de mai jos și vă rugăm să păstrați în minte toate director trebuie să aibă __init__.py
ca să-i recunoscut ca un director.
import sys și a alerga
sys.calea` , va fi capabil pentru a vedea toate calea care este în curs de căutare de python.Trebuie să fii capabil să-ți văd director de lucru curent.
Acum de import sub-director și respectiv modulul pe care doriți să utilizați utilizând import urmați această comandă: `import subdir.subdir.nume modul ca " abc " și acum puteți folosi metode în acest modul. ScreenShotforSameIssue
după cum puteți vedea în imaginea de mai am un singur părinte director și două sub-directoarele și în al doilea sub-directoarele am modulul==CommonFunction și vezi partea dreaptă, după executarea sys.cale pot să-mi văd de lucru director