J'essaie de lancer un module à partir de la console. La structure de mon répertoire est la suivante:
J'essaie d'exécuter le module p_03_using_bisection_search.py
à partir du répertoire problem_set_02
en utilisant:
$ python3 p_03_using_bisection_search.py
Le code à l'intérieur de p_03_using_bisection_search.py
est:
__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()
J'importe une fonction qui est dans p_02_paying_debt_off_in_a_year.py
et dont le code est:
__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()
Je reçois l'erreur suivante:
ModuleNotFoundError: No module named '__main__.p_02_paying_debt_off_in_a_year'; '__main__' is not a package
Je ne sais pas comment résoudre ce problème. J'ai essayé d'ajouter un fichier __init__.py
, mais cela ne fonctionne toujours pas.
Supprimez simplement le point pour l'importation relative et faites:
from p_02_paying_debt_off_in_a_year import compute_balance_after
J'ai le même problème que vous. Je pense que le problème est que vous avez utilisé l'importation relative dans in-package import
. Il n'y a pas de __init__.py
dans votre répertoire. Donc, importez comme Moïse a répondu ci-dessus.
Le problème principal, je pense, est lorsque vous importez avec un point, comme:
from .p_02_paying_debt_off_in_a_year import compute_balance_after
.
Cela équivaut à:
from __main__.p_02_paying_debt_off_in_a_year import compute_balance_after
.
Nous savons tous que __main__
fait référence à votre module actuel p_03_using_bisection_search.py
.
Voici le problème:
Lorsque l'interprète entre dans p_03.py
, le script est égal à:
from p_03_using_bisection_search.p_02_paying_debt_off_in_a_year import compute_balance_after
Apparemment, p_03_using_bisection_search
ne contient aucun module ou instance appelé p_02_paying_debt_off_in_a_year
.
En bref, l'interprète ne connaît pas l'architecture de votre répertoire.
Je suis donc arrivé à une solution plus propre sans changer les objets de valeur de l’environnement Python (après avoir recherché comment requêtes do en importation relative):
L'architecture principale de l'annuaire est:
main.py
setup.py
---problem_set_02/
------__init__.py
------p01.py
------p02.py
------p03.py
Puis écrivez dans __init__.py
:
from .p_02_paying_debt_off_in_a_year import compute_balance_after
Ici, __main__
est __init__
, il se réfère exactement au module problem_set_02
.
Ensuite, allez à main.py
:
import problem_set_02
Vous pouvez également écrire un setup.py
pour ajouter un module spécifique à l'environnement.
Salut S'il vous plaît suivez l'étape ci-dessous, vous résoudrez ce problème . Si vous avez créé un répertoire et un sous-répertoire, suivez les étapes ci-dessous et s'il vous plaît gardez à l'esprit que tout répertoire doit avoir "init .py" pour le faire reconnaître comme un répertoire.
"import sys" et exécutez "sys.path", vous pourrez voir tous les chemins recherchés par python.Vous devez pouvoir voir votre répertoire de travail actuel.
Maintenant, importez le sous-répertoire et le module respectif que vous souhaitez utiliser avec import suivez cette commande: "import subdir.subdir.modulename as abc" et vous pouvez maintenant utiliser les méthodes de ce module . ScreenShotforSameIssue
comme vous pouvez le voir sur cette capture d'écran, j'ai un répertoire parent et deux sous-répertoires et, dans le deuxième sous-répertoire, j'ai le module == CommonFunction et vous voyez à droite après l'exécution de sys.path, je vois mon répertoire de travail.
Essayez de le lancer en tant que:
python3 -m p_03_using_bisection_search