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

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

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

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

import

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

Python 3.x

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

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Q&A

解決済

1回答

1734閲覧

Jupyter notebookで特定の名前のフォルダを読み込めなくて困っています

bigbabysan

総合スコア3

Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

import

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

Python 3.x

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

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

0グッド

0クリップ

投稿2020/07/16 00:33

前提・実現したいこと

Jupyter notebookを用いて学習しているのですが
sys.pathの設定が悪いのか特定の名前のフォルダを読み込めなくて困っています。

具体的には「common」という名前のフォルダを読み込まないです。
実行ファイルの親ディレクトリにcommonフォルダは確かに存在していてその中に
layers.pyが入ってるのでフォルダ自体が無いというわけではありません。

また、他の名前のフォルダだったら問題なく読み込めます。

「ゼロから作るDeep Learning 2 - 自然言語処理編」という本で学習していて
サンプルコードは下記からダウンロードしています。該当のコードは「ch01」フォルダの「two_layer_net.py」にあります。

よろしくお願い致します。
m(_ _)m
https://github.com/oreilly-japan/deep-learning-from-scratch-2

発生している問題・エラーメッセージ

--------------------------------------------------------------------------- ModuleNotFoundError Traceback (most recent call last) <ipython-input-67-9a9cd1d38c2c> in <module>() 2 sys.path.append('..') 3 import numpy as np ----> 4 from common.layers import Affine, Sigmoid, SoftmaxWithLoss ModuleNotFoundError: No module named 'common.layers'

該当のソースコード

python3

1import sys 2sys.path.append('..') 3import numpy as np 4from common.layers import Affine, Sigmoid, SoftmaxWithLoss

試したこと

ここに問題に対して試したことを記載してください。
commonフォルダ以外のフォルダをcommonフォルダと同階層に設置すると同じ記載方法で読み込みに成功

commonフォルダをコピーしてリネーム(例:common44)したら読み込み動作が何故か成功する

ターミナルからcommonフォルダにchomd 777を実行するも変化なし

最終的に
sys.path.append(‘..‘)→sys.path.append(‘../common’)に変更し
commonフォルダ内のファイルのimport部分からcommon箇所を削除でエラーメッセージが出ないように
例 from common.np import *from np import *

補足情報(FW/ツールのバージョンなど)

jupyter-notebook : 5.6.0

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

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

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

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

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

guest

回答1

0

ベストアンサー

同名のモジュールがあったりしませんか?

もしそうなら、
sys.path.insert(0, "..")するとpathの先頭に入って、使いたい方のcommon.layersが先に見つかるかもです。

投稿2020/07/16 01:05

編集2020/07/16 01:06
nouken

総合スコア369

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

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

bigbabysan

2020/07/16 01:41

ご回答ありがとうございます! 同名のモジュールは存在しないですね。。 sys.path.insert(0, "..")を使ってみたのですがダメでした。。 commonフォアルダをリネームすると読み込むのでなぜcommonというフォルダ名だと読み込めないのか分からず困っています...。 =補足= ▼ch01フォルダとcommonフォルダは同階層にあります ・ch01フォルダ  -ch01.ipynb(※Jupyterで実行しているファイル) ・commonフォルダ  -layers.py ▼ターミナルでls -laしたcommonフォルダ権限 drwxrwxrwx@
nouken

2020/07/16 01:52 編集

. ├── ch1 │   └── test.ipynb └── common   └── layers.py 手元ではtest.ipynbから import sys sys.path.append("..") from common.layers import Test でいけましたね。 jupyter kernelのリスタートとかは試しましたか?
bigbabysan

2020/07/16 02:05

迅速なご回答誠にありがとうございます! 名前もtest.ipynbに変更してみてkernelリスタートしてもダメでした。 そして下記からサンプルコードをダウンロードし直して解凍し同様に試したのですが同じエラーでした。ググっても類似ケースが全然出ずこの本のサンプルコードを実行する際は何かしらのバグが生じるので名前を変える必要があると認識しようかなとも思っています...。 ▼サンプルコードダウンロード元 https://github.com/oreilly-japan/deep-learning-from-scratch-2 ▼フォルダ構成 ├── ch01 │ └── test.ipynb └── common   └── layers.py 手元ではtest.ipynbから ▼Jupyternotebookで試したコード import sys sys.path.append("..") from common.layers import Test ▼エラー文 --------------------------------------------------------------------------- ModuleNotFoundError Traceback (most recent call last) <ipython-input-3-35ea1315183b> in <module>() 1 import sys 2 sys.path.append("..") ----> 3 from common.layers import Test ModuleNotFoundError: No module named 'common.layers'
bigbabysan

2020/07/16 02:15

あと補足でlayersを丸々importしようとした場合下記のエラーが出ます ▼実行コード import sys sys.path.append('..') import numpy as np from common import layers ▼エラー文 --------------------------------------------------------------------------- ImportError Traceback (most recent call last) <ipython-input-9-bb6dcac20bdd> in <module>() 2 sys.path.append('..') 3 import numpy as np ----> 4 from common import layers ImportError: cannot import name 'layers' from 'common' (/Users/【英語で自分の名前】/.pyenv/versions/anaconda3-5.3.1/lib/python3.7/site-packages/common/__init__.py)
bigbabysan

2020/07/16 02:22

▼追加で試した内容 commonフォルダをコピーして「common_after」フォルダを作成 ↓ Jupyter上から「common_after」フォルダの読み込みに成功 ↓ 元となるcommonフォルダの名前を「common2222」に一時的に変更 ↓ 「common_after」フォルダを「common」フォルダに名前変更 ↓ Jupyter上から「common」フォルダ読み込みに失敗☓ ---------------- commonって名前がエラーが出ている原因みたいです。。
nouken

2020/07/16 03:10

ダウンロードして確かに再現できました。 jupyter notebookをどこで実行しているのかわかりませんけど、 私はディレクトリのtop(deep-learning-from-scratch-2-master)で実行していたので `sys.path.append(".")`すれば問題なく動きましたがどうですか?
nouken

2020/07/16 03:15

逆にch01ディレクトリで実行する場合、`sys.path.append("..")`で問題なく動きます。
bigbabysan

2020/07/16 03:51

何度も本当にありがとうございます! m(_ _)m sys.path.append(".")としたのですがダメでした。。 commonフォルダと同階層に「test_top.ipynb」に作り ▼フォルダ構成 ├── ch01 │ └── test.ipynb └── common │  └── layers.py └── test_top.ipynb import sys from common import layers とコードを実行したら読みに成功しました。 しかしch01内のtest.ipynbで下記を実行すると (sys.path.append("..")としても同エラー文) mport sys sys.path.append(".") from common import layers --------------------------------------------------------------------------- ImportError Traceback (most recent call last) <ipython-input-4-522e300ba06e> in <module>() 1 import sys 2 sys.path.append(".") ----> 3 from common import layers ImportError: cannot import name 'layers' from 'common' (/Users/【自分の名前】/.pyenv/versions/anaconda3-5.3.1/lib/python3.7/site-packages/common/__init__.py) というエラーが出てしまいます。エラー文的にanaconda側の設定が悪いのかなとも思いました。
nouken

2020/07/16 03:57

引っかかってる`common`が`site-packages`にあるのはおかしいですよね。。 /Users/【自分の名前】/.pyenv/versions/anaconda3-5.3.1/lib/python3.7/site-packages/ にあるcommonが何者か調べてみてはどうですか?
nouken

2020/07/16 03:59

↑意図は、今引っかかっているcommonは本当にlayersをimport したいcommonとは違う可能性はないですか?
nouken

2020/07/16 04:00

仮にそうなら`sys.path.insert(0, ".")` はダメですか?
bigbabysan

2020/07/16 05:25

親身になって頂き本当にありがとうございます! sys.path.insert(0, ".")も sys.path.insert(0, "..") もダメで同様に下記のエラーが出ました。。 読み込めない原因としては仰るとおり下記の箇所を参照しにいってるためですね...。 ImportError: cannot import name 'layers' from 'common' (/Users/【自分の名前】/.pyenv/versions/anaconda3-5.3.1/lib/python3.7/site-packages/common/__init__.py) site-packagesディレクトリにいき `ls`コマンドを打つと common common-0.1.2.dist-info が見つかり cd common ls とすると __init__.py __pycache__ term がありました。 ググるとこれみたいですが消して良いものなんですかね...? 日本語の解説サイトが全然見つからず判断しかねています。。 https://pypi.org/project/common/
nouken

2020/07/16 05:41

標準ライブラリではないので消しても問題ないかもですけど、できれば他の方法が良いですよね。 site-packagesがモジュール検索パスのリストの最初の方にあるのでsys.path.appendだとダメなのはわかるんですが、insertでもダメとなると... ちょっと現段階ではわからないです。すみません。
bigbabysan

2020/07/16 06:25

またcommon使う時に考えればいいと思ったので pip uninstallでcommonを消したら無事読み込めました! とても丁寧に対応して頂き誠にありがとうございます。 m(_ _)m
nouken

2020/07/16 06:41

いえいえ、質問者様からどんどん情報を提示いただき回答しやすかったです。 お互い機械学習がんばりましょう。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問