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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Python 3.x

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

Q&A

解決済

3回答

1378閲覧

モジュールのインポートができない

BuhKeil

総合スコア34

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Python 3.x

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

0グッド

1クリップ

投稿2021/07/27 01:57

やりたいこと

pythonファイル(フォルダ構成の項目でhoge.py)で、
3つのモジュールファイル(フォルダ構成の項目でmodule_1.py、module_2.py、module_3.py)をインポートしたいです・

環境

  • windows10 64bit
  • Python v3.9.4

フォルダ構成

+ root_folder + module_3.py + project_folder + hoge.py + module_1.py + module_2.py

コード(hoge.py)

python

1import os 2import module_1 3import module_2 4 5print(os.getcwd()) 6os.chdir("..") 7print(os.getcwd()) 8import module_3 9os.chdir("project_folder") 10

試したこととエラー

c:\users\myname\documents\python\root_folder\project_folder
c:\users\myname\documents\python\root_folder

と表示された後、
builtins.ModuleNotFoundError: No module named "module_3"

とエラーが表示されます。os.getcwd()でカレントフォルダの変更はできている
ように思うのですが、module_3.pyのインポートができないのはなぜでしょうか?

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

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

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

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

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

guest

回答3

0

自己解決

アドバイスの通り、
import os
import sys

sys.path.append(os.path.join(os.path.dirname(file),".."))
でうまくできました。

投稿2021/07/27 02:34

BuhKeil

総合スコア34

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

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

0

モジュール検索パスにカレントディレクトリが無いのでは。
以下を確認してみてください。
リストオブジェクト sys.path
環境変数 PYTHONPATH
site-packagesディレクトリのパス設定ファイル .pth

投稿2021/07/27 02:18

itagagaki

総合スコア8402

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

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

0

https://docs.python.org/ja/3/library/sys.html#sys.path

起動時に初期化された後、リストの先頭 (path[0]) には Python インタプリタを起動したスクリプトのあるディレクトリが挿入されます。

基準はカレントディレクトリではないです。
起動したスクリプトのあるディレクトリです。


このような構成で自然にmodule_3.pyをインポートする手段はありません。

  • カレントディレクトリは動かさずに sys.path の先頭に親ディレクトリ記法を自分でセットする (例 import sys, os; sys.path.append(os.pardir)
  • カレントディレクトリを動かして sys.path の先頭にカレントディレクトリ記法を自分でセットする (例 import sys, os; os.chdir(os.curdir); sys.path.append(os.curdir)
  • sys.path の先頭に起動スクリプトの一つ上の絶対パスを自分でセットする
  • -mオプションpython -m project_folder.hoge と起動する
  • 起動するスクリプトはサブディレクトリに置かない

といった選択肢になります。

投稿2021/07/27 02:11

編集2021/07/27 03:01
quickquip

総合スコア11038

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

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

BuhKeil

2021/07/27 02:33

コメントありがとうございました。感謝いたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問