コンソールからモジュールを実行しようとしています。私のディレクトリの構造はこれです:
p_03_using_bisection_search.py
ディレクトリから、モジュールproblem_set_02
を実行しようとしています。
$ python3 p_03_using_bisection_search.py
p_03_using_bisection_search.py
内のコードは次のとおりです。
__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()
私はp_02_paying_debt_off_in_a_year.py
にある関数をインポートしています。
__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()
次のようなエラーが表示されます。
ModuleNotFoundError: No module named '__main__.p_02_paying_debt_off_in_a_year'; '__main__' is not a package
この問題を解決する方法がわかりません。 __init__.py
ファイルを追加しようとしましたが、まだ機能していません。
相対インポートのドットを削除して、次のようにします。
from p_02_paying_debt_off_in_a_year import compute_balance_after
私はあなたと同じ問題を抱えています。私は問題はあなたがin-package import
で相対インポートを使ったことだと思います。ディレクトリに__init__.py
がありません。モーセが上記のようにインポートしてください。
私が思うに中心的な問題は、あなたがドットでインポートするときです。
from .p_02_paying_debt_off_in_a_year import compute_balance_after
。
これは以下と同等です。
from __main__.p_02_paying_debt_off_in_a_year import compute_balance_after
。
__main__
があなたの現在のモジュールp_03_using_bisection_search.py
を参照していることを私たちは皆知っています。
これが問題です:
インタプリタがp_03.py
に入ると、スクリプトは次のようになります。
from p_03_using_bisection_search.p_02_paying_debt_off_in_a_year import compute_balance_after
どうやらp_03_using_bisection_search
にはp_02_paying_debt_off_in_a_year
という名前のモジュールやインスタンスは含まれていません。
簡単に言うと、インタプリタはあなたのディレクトリアーキテクチャを知りません。
だから私は(相対インポートで 要求 どうするかを調べた後に)Python環境の貴重品を変えずに、よりきれいな解決策を思いついた。
ディレクトリの主なアーキテクチャは次のとおりです。
main.py
setup.py
---problem_set_02/
------__init__.py
------p01.py
------p02.py
------p03.py
それから__init__.py
を書いてください:
from .p_02_paying_debt_off_in_a_year import compute_balance_after
ここで__main__
は__init__
です、それは正確にモジュールproblem_set_02
を参照します。
それからmain.py
に行きます:
import problem_set_02
特定のモジュールを環境に追加するためにsetup.py
を書くこともできます。
こんにちはステップの下に従ってください、あなたはこの問題を解決します。ディレクトリとサブディレクトリを作成した場合は、以下の手順に従ってください。ディレクトリとして認識させるには、すべてのディレクトリに " init 。py"が必要です。
「import sys」を実行して「sys.path」を実行すると、pythonで検索されているすべてのパスを確認できます。現在の作業ディレクトリを確認できるはずです。
インポートを使用したいサブディレクトリとそれぞれのモジュールをインポートします。 " import subdir.subdir.modulename as abc "と入力すると、そのモジュールのメソッドを使用できます。 スクリーンショットの同名作品
このスクリーンショットでわかるように、1つの親ディレクトリと2つのサブディレクトリがあり、2番目のサブディレクトリの下にはmodule == CommonFunctionがあり、sys.pathの実行後に右側に表示されます。
次のように実行してみてください。
python3 -m p_03_using_bisection_search