

「ゼロから作るディープラーニング」という本を読んで勉強しています。  
読み進めていくとcommonというモジュールをインポートすることになるのですが、ここで以下のエラーが発生します。

[code]

    ModuleNotFoundError: No module named 'common'
    
[/code]

commonモジュールというものをインストールしようとしたのですがそもそもこれ自体一般公開されているものではないらしく、インストールできませんでした。  
また、githubにはオライリー公式のcommonモジュールのファイルがあったのですが、このファイルはモジュールとして使うことはできるのでしょうか？できるのであればやり方を教えていただきたいです。

【ゼロから作るディープラーニング ソースコード】  
<https://github.com/oreilly-japan/deep-learning-from-scratch>


CC BY-SA 4.0
2022-02-28T14:14:58.533
86617
2022-09-02T15:00:30.067
2022-02-28T16:25:07.447
3060
48078
question
python python3 深層学習
commonモジュールをimportしたい


参照先のリポジトリに`common`というフォルダがあって、それを`import`するようになっています。

例えば`ch06/weight_init_compare.py`の2から5行目に以下の行があり、これが`common`を`import`出来るようにするための準備です。

>
[code]

>     import os
>     import sys
>  
>     sys.path.append(os.pardir)  # 親ディレクトリのファイルをインポートするための設定
>  
[/code]

上記のコードは、リポジトリのフォルダ構成をそのまま展開して使用することを前提にしています。

貴方が何か新しいことを行いたい場合、上記のリポジトリを展開したフォルダの`ch01`から`ch08`があるのと同じ階層に自分で何かのフォルダ(例えば`sample01`等)を作って、自分で作成したソースコードをそのフォルダ内に格納し、上記のコードを`common`を`import`する前に挿入すれば良いでしょう。

そうしたフォルダ構成を同様に保つことはせずに済ませたい場合は、上記コードの`os.pardir`の部分を、展開した`common`の親フォルダを絶対パスで指定すれば同等の事が出来ます。

仕様については以下を参照してください。  
[6.1.2. モジュール検索パス](https://docs.python.org/ja/3/tutorial/modules.html#the-
module-search-path)  
[6.2. 標準モジュール](https://docs.python.org/ja/3/tutorial/modules.html#standard-
modules)

* * *

Jupyter-
lab/notebook系の作業フォルダがスクリプト/ノートブックファイルの存在するフォルダと別になっていることもある開発環境の場合、上記方法だと上手くいかないこともあります。  
それは`os.pardir`が`'..'`という文字列定数なので、それは現在の作業フォルダの親フォルダを示すものだからです。  
[os.pardir](https://docs.python.org/ja/3/library/os.html#os.pardir)

> 親ディレクトリを参照するためにオペレーティングシステムで使われる文字列定数です。 POSIX と Windows では `'..'` になります。
> os.path からも利用できます。

参照先リポジトリのIssuesにこんな記事がありました。  
[sys.path.append(os.pardir)がうまく行かず、os.pardirのところにフルパスを指定したところ動きました
#25](https://github.com/oreilly-japan/deep-learning-from-scratch/issues/25)  
質問者の環境はmacosですがコンソールのようなので参考程度でしょうか。

例えばスクリプトファイル自身のパスを取得出来ればそこから親フォルダを取得する方法があります。  
[Pythonで実行中のスクリプトのパスを取得する: __file__, os.path.abspath, os.path.dirname,
os.path.basename](https://yu-nix.com/blog/2021/7/20/python-path-get/)  
[Pythonで親ディレクトリの絶対パスを取得](https://qiita.com/Amayarielu/items/56d7f5e74ee25bb8d234)

ただしどうもJupyter-lab/notebook系でノートブックファイルのパスを取得する標準的な方法は無さそうな感じです。  
でもこちらにそのためのパッケージを自分で作ったこんな記事が見つかったので、試してみてはどうでしょう？  
[[Jupyter]
実行中のipynbファイルが自分のパスを取得できるパッケージを作った](https://qiita.com/kzm4269/items/7f79ac40cf8f30e4afa3)

あるいはこんな記事もありますが、ノートブックを色んなフォルダに分けたい場合は向いて無いかもしれません。  
[JupyterLabのホームディレクトリを変更する方法](https://sawalabo.com/210318-jupyterlab-home-
dir/)


CC BY-SA 4.0
2022-02-28T14:44:24.590
86618
2022-03-01T02:21:12.260
2022-03-01T02:21:12.260
26370
26370
86617
answer