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

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

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

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

import

自身のプラットフォーム・プログラム・データセットに対して、外部ソースを取り込むプロセスをimportと呼びます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

5180閲覧

python*別ディレクトリのコードのインポートで困っています

nmnm713

総合スコア6

Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

import

自身のプラットフォーム・プログラム・データセットに対して、外部ソースを取り込むプロセスをimportと呼びます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/05/06 23:59

Python(Anaconda)上で不明点があるので質問させていただきます。

自分が動かすコードと別のディレクトリにあるコードを
参照、インポートしたいのですがうまくいかずエラーが出ます(;;)

〇ディレクトリの状況〇
src
├Dir1
│ ├code_1.py

├Dir2
. ├code_2.py

今、Dir2のcode_2.py が実行すべきファイルです。
code_2.py内には

from src.Dir1.code_1.py import ooooo

と記載されています

code_1.py内にも
def ooooo(xx, xx):
と上でimportしたいものが定義されていて、
import sys
sys.path.append(".")
の2文があります。
(こちらの詳しい意味は分かりませんがエラーが出た際に調べたら解決策の一つに載っていた)

いまcode_2.pyを実行したところ

Traceback (most recent call last): File "extract_path.py", line 19, in <module> from src.Dir1.code_1.py import ooooo ModuleNotFoundError: No module named 'src.Dir1'

とエラーが出てしまいました。

こちらの解決策が調べてみてもいまいちわかりません。。
どうかお力添えいただければと思います
よろしくおねがいいたします

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

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

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

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

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

guest

回答2

0

ベストアンサー

Python

1from src.Dir1.code_1.py import ooooo

は src ディレクトリの親ディレクトリを基準にした相対パス指定です。code2.py で

Python

1sys.path.append(".")

としているということは、カレントディレクトリをインポートディレクトリに指定するということですから、srcディレクトリの親ディレクトリをカレントディレクトリに変更してから実行すると動くと思います。
ただそれでは不便なので、

  • src の絶対パスを調べて、それを import ディレクトリに設定する
  • code1 の import は src ディレクトリからの相対パス指定にする

とすればよいでしょう。
そのためには、code_2.py について sys.path の設定と import のところを次のように変更すればよいと思います。

Python

1import os 2import sys 3sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) 4from Dir1.code_1 import ooooo

投稿2020/05/07 02:02

編集2020/05/07 05:03
cugel

総合スコア220

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

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

nmnm713

2020/05/07 04:57 編集

回答ありがとうございます! 上記教えていただいたやり方で実行すると File "code_2.py", line 17, in <module> sys.path.append(".") NameError: name 'sys' is not defined というエラーが出てしまいました…(;;)
cugel

2020/05/07 04:42

sys ライブラリの import が抜けています。 import sys あと、上のやり方の通りなら sys.path.append(".") はいらないのですが、extract_path.py は code_1.py と code_2.py のどちらにあたるのでしょうか。
nmnm713

2020/05/07 04:57

いま動かしたファイルはcode_2.pyです! 修正します
cugel

2020/05/07 05:05

すみません。私の修正のとおりなら、src ディレクトリが import ディレクトリになっているべきなので、間違いがありました。具体的には、 sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) のところで、2つ上ではなく、1つ上のディレクトリを sys.path に追加します。
nmnm713

2020/05/08 09:26

お返事遅くなりすみません。 上記のやり方で解決しました!! とても助かりました。。ありがとうございます!
guest

0

以下リンクのサイトの [親ディレクトリにあるファイルの import] の項目が今回の問題に当てはまると思います。
参考:Python で別ファイルの import

nmnm713さんのコードで言うならば
sys.path.append(".") を sys.path.append("..") に変更することになると思います。
append(".")は、実行しているファイルのディレクトリを指していて(Dir2)
今回はその一つ上の親ディレクトリであるscrを指定したいため append("..")と指定してあげると良いのではと思います。

またインポートするときは拡張子(.py)の記載は不要です。お試しください。

Python

1from Dir1 import code_1 2 3code_1.ooooo(xx, xx)

投稿2020/05/07 01:21

per_

総合スコア41

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

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

nmnm713

2020/05/07 01:31

回答ありがとうございます! ただ上記のアドバイスの通り実行しても まったく同じエラーが出てしまいました(;;)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問