質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Q&A

解決済

1回答

640閲覧

Python3 Tkinter 画面遷移でのimportについて

person

総合スコア223

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

0グッド

0クリップ

投稿2020/04/06 12:26

完全に独立したアプリ2つがあります。

このアプリA,Bをトップ画面と双方向の繊維ができるようにしようと思いました。

TOP ⇔ A
TOP ⇔ B

一応、Tk()widget.destroy()を使ってそれっぽい動作にしようと思っています。

そこで今までのアプリA,Bについて

アプリA

  • main.pytest1.pytest2.pyをインポート)
  • test1.py
  • test2.py

アプリB

  • main.pytest3.pytest4.pyをインポート)
  • test3.py
  • test4.py

これらをフォルダに入れて次のような構造にしようと思っています。

APP
....├ APP_A
........├ main.py
........├ test1.py
........└ test2.py
....└ APP_B
........├ main.py
........├ test3.py
........└ test4.py

このときに、アプリA,Bのimportを変えなければならなくなりました。
(今までAPP_A、APP_Bからみてどの位置にあるファイルをインポートするかだったが、構造を変えたことでAPPからみてどの位置にあるファイルをインポートするかを指定することになった)

とはいえ、できる限り元のソースファイルは下手に編集したくないです。

何かいい方法ってありますか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

相対インポートでどうでしょう。
どの場所から、どのように実行しているのかでも変わってきますが。

# APP_A/main.py from . import test1 from . import test2

相対インポートにした場合、個別に各アプリを実行したいといった場合、
実行方法の変更が必要になります。 -m オプションについて

例えば、個別のアプリを実行する場合

  • python APP_A/main.py として実行する場合 → ライブラリのパス設定が必要
  • python -m APP_A/main として実行する場合 → 相対インポートでOK

トップのアプリは

  • python main.py として実行する場合 → APP_A/main.py 側では相対インポートでOK
  • python -m main として実行する場合 → APP_A/main.py 側では相対インポートでOK

因みに、Pythonでは、パッケージ名を指定して実行する時に、
__main__.py が実行される仕組みがあるので、
APP_A/main.pyAPP_A/__main__.py にしておくと、
python -m APP_A でアプリAが実行できます


環境変数 PYTHONPATH を通す方法もありますが、
APP_A, APP_B それぞれをパスに設定すると、
ファイル名の衝突(この場合 main.py) が問題になることがあります。

投稿2020/04/06 14:23

teamikl

総合スコア8664

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問