J'essaie d'exécuter un module à partir de la console. La structure de mon répertoire est la suivante :
[!entrer la description de l'image ici][1]][1]
J'essaie d'exécuter le module p_03_using_bisection_search.py
, depuis le 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 __name__ == '__main__':
main()
J'importe une fonction qui se trouve dans p_02_paying_debt_off_in_a_year.py
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 __name__ == '__main__':
main()
J'obtiens l'erreur suivante :
ModuleNotFoundError: No module named '__main__.p_02_paying_debt_off_in_a_year'; '__main__' is not a package
Je n'ai aucune idée de la façon de résoudre ce problème. J'ai essayé d'ajouter un fichier __init__.py
, mais cela ne fonctionne toujours pas.
J'ai le même problème que vous. Je pense que le problème est que vous avez utilisé un import relatif dans in-package import
. Il n'y a pas de __init__.py
dans votre répertoire. Il suffit donc d'importer comme l'a répondu Moses ci-dessus.
Le problème principal, je pense, est lorsque vous importez avec un point :
from .p_02_paying_debt_off_in_a_year import compute_balance_after
C'est équivalent à :
from __main__.p_02_paying_debt_in_a_year import compute_balance_after
où __main__
fait référence à votre module actuel p_03_using_bisection_search.py
.
En bref, l'interpréteur ne connaît pas l'architecture de votre répertoire.
Quand l'interpréteur arrive dans p_03.py
, le script est égal :
from p_03_using_bisection_search.p_02_paying_debt_in_a_year import compute_balance_after
et p_03_using_bisection_search
ne contient aucun module ou instance appelé p_02_paying_debt_in_a_year
.
J'ai donc trouvé une solution plus propre sans changer les valeurs de l'environnement python (après avoir regardé comment [requests][1] font dans l'importation relative) :
L'architecture principale du répertoire 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 fait exactement référence au module problem_set_02
.
Ensuite, allez dans main.py
:
import problem_set_02
Vous pouvez aussi écrire un setup.py
pour ajouter un module spécifique à l'environnement.
[1] : https://github.com/requests/requests/blob/master/requests/__init__.py
Bonjour Veuillez suivre les étapes ci-dessous, vous résoudrez ce problème.
Si vous avez créé un répertoire et des sous-répertoires, suivez les étapes ci-dessous et gardez à l'esprit que tous les répertoires doivent avoir __init__.py
pour être reconnus comme des répertoires.
import sys
et exécutez sys.path
, vous serez en mesure de voir tous les chemins qui sont recherchés par python. Vous devez être en mesure de voir votre répertoire de travail actuel.
Maintenant, importez le sous-répertoire et le module respectif que vous voulez utiliser en utilisant import et suivez cette commande : import subdir.subdir.modulename as abc
et maintenant vous pouvez utiliser les méthodes de ce module.
[ScreenShotforSameIssue] [1]
[1] : https://i.stack.imgur.com/5F3Sf.png comme vous pouvez le voir dans cette capture d'écran, j'ai un répertoire parent et deux sous-répertoires et sous le deuxième sous-répertoire, j'ai module==CommonFunction et vous voyez à droite, après l'exécution de sys.path, je peux voir mon répertoire de travail.