python - español - ModuleNotFoundError: ¿Qué significa que__main__ no es un paquete?
main python 3 (4)
Hola, siga el siguiente paso, resolverá este problema. Si ha creado un directorio y un subdirectorio, siga los pasos a continuación y tenga en cuenta que todo directorio debe tener " init .py" para que sea reconocido como un directorio.
-
"import sys" y ejecute "sys.path", podrá ver toda la ruta que está siendo buscada por python. Debe poder ver su directorio de trabajo actual.
-
Ahora importe el subdirectorio y el módulo respectivo que desea usar usando import, siga este comando: " import subdir.subdir.modulename as abc " y ahora puede usar los métodos en ese módulo. ScreenShotforSameIssue
Como puede ver en esta captura de pantalla, tengo un directorio principal y dos subdirectorios y en el segundo subdirectorio tengo el módulo == CommonFunction y puede ver el lado derecho después de la ejecución de sys.path. Puedo ver mi directorio de trabajo
Estoy tratando de ejecutar un módulo desde la consola. La estructura de mi directorio es esta:
Estoy tratando de ejecutar el módulo
p_03_using_bisection_search.py
, desde el directorio
problem_set_02
usando:
$ python3 p_03_using_bisection_search.py
El código dentro de
p_03_using_bisection_search.py
es:
__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()
Estoy importando una función que está en
p_02_paying_debt_off_in_a_year.py
cuyo código es:
__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()
Estoy teniendo el siguiente error:
ModuleNotFoundError: No module named ''__main__.p_02_paying_debt_off_in_a_year''; ''__main__'' is not a package
No tengo idea de cómo resolver este problema.
Intenté agregar un archivo
__init__.py
, pero aún no funciona.
Intenta ejecutarlo como:
python3 -m p_03_using_bisection_search
Simplemente elimine el punto para la importación relativa y haga:
from p_02_paying_debt_off_in_a_year import compute_balance_after
Tengo el mismo problema que tú.
Creo que el problema es que usaste la importación relativa en la importación en
in-package import
.
No hay
__init__.py
en su directorio.
Tan solo importa como Moisés respondió arriba.
Creo que el problema principal es cuando importas con un punto:
from .p_02_paying_debt_off_in_a_year import compute_balance_after
Es equivalente a:
from __main__.p_02_paying_debt_off_in_a_year import compute_balance_after
donde
__main__
refiere a su módulo actual
p_03_using_bisection_search.py
.
Brevemente, el intérprete no conoce la arquitectura de su directorio.
Cuando el intérprete entra en
p_03.py
, el guión es igual a:
from p_03_using_bisection_search.p_02_paying_debt_off_in_a_year import compute_balance_after
y
p_03_using_bisection_search
no contiene ningún módulo o instancia llamado
p_02_paying_debt_off_in_a_year
.
Así que se me ocurrió una solución más limpia sin cambiar los valores del entorno de Python (después de buscar cómo funcionan las requests en la importación relativa):
La arquitectura principal del directorio es:
main.py
setup.py
---
problem_set_02/
------
__init__.py
------
p01.py
------
p02.py
------
p03.py
Luego escriba en
__init__.py
:
from .p_02_paying_debt_off_in_a_year import compute_balance_after
Aquí
__main__
es
__init__
, se refiere exactamente al módulo
problem_set_02
.
Luego ve a
main.py
:
import problem_set_02
También puede escribir un
setup.py
para agregar un módulo específico al entorno.