Jeg forsøger at køre et modul fra konsollen. Strukturen i min mappe er som følger:
[]]1
Jeg forsøger at køre modulet p_03_using_bisection_search.py
, fra mappen problem_set_02
, ved hjælp af:
$ python3 p_03_using_bisection_search.py
Koden inde i p_03_using_bisection_search.py
er:
__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()
Jeg importerer en funktion, der er i p_02_paying_debt_off_in_a_year.py
, hvis kode er:
__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()
Jeg får følgende fejl:
ModuleNotFoundError: No module named '__main__.p_02_paying_debt_off_in_a_year'; '__main__' is not a package
Jeg har ingen idé om, hvordan jeg kan løse dette problem. Jeg har prøvet at tilføje en __init____.py
fil, men det virker stadig ikke.
Jeg har det samme problem som dig. Jeg tror, at problemet er, at du har brugt relativ import i in-package import
. Der er ingen __init____.py
i din mappe. Så du skal bare importere som Moses svarede ovenfor.
Det centrale problem tror jeg er, når du importerer med et punktum:
from .p_02_paying_debt_off_in_a_year import compute_balance_after
Det svarer til:
from __main__.p_02_paying_debt_off_in_a_year import compute_balance_after
hvor __main__
henviser til dit aktuelle modul p_03_using_bisection_search.py
.
Kort sagt, fortolkeren kender ikke din mappearkitektur.
Når fortolkeren kommer ind i p_03.py
, er scriptet lig med:
from p_03_using_bisection_search.p_02_paying_debt_off_in_a_year import compute_balance_after
og p_03_using_bisection_search
indeholder ikke nogen moduler eller instanser kaldet p_02_paying_debt_off_in_a_year
.
Så jeg fandt på en renere løsning uden at ændre python-miljøværdier (efter at have kigget på hvordan requests gør i relativ import):
Den vigtigste arkitektur i mappen er:
main.py
setup.py
.
---`problem_set_02/
------__init__.py
------p01.py
------p02.py
------p03.py
Skriv derefter i __init__.py
:
from .p_02_paying_debt_off_in_a_year import compute_balance_after
Her er __main__
__init__
, det henviser præcis til modulet problem_set_02
.
Gå derefter til main.py
:
import problem_set_02
.
Du kan også skrive en setup.py
for at tilføje et specifikt modul til miljøet.
Hej Følg nedenstående trin, så løser du problemet.
Hvis du har oprettet en mappe og en undermappe, skal du følge nedenstående trin og huske på, at alle mapper skal have __init____.py
for at blive genkendt som en mappe.
import sys
og kør sys.path
, du vil kunne se alle stier, der søges af python.Du skal kunne se din nuværende arbejdsmappe.
Nu importerer du undermappe og respektive modul, som du vil bruge ved hjælp af import, følg denne kommando: Du kan nu bruge metoderne i det pågældende modul. ScreenShotforSameIssue
Som du kan se i dette skærmbillede har jeg en overordnet mappe og to undermapper og under den anden undermappe har jeg module==CommonFunction og du kan se på højre side efter udførelse af sys.path kan jeg se min arbejdsmappe