1. ホーム
  2. python-3.x

[解決済み] Jupyter Notebookに__file__が存在しない。

2022-11-02 07:35:28

質問

私は今 Jupyterノートブック サーバ (v4.2.2) で、Python 3.4.2 を使用しています。 私はグローバル名 __file__ ノートブックは他のユーザーからクローンされ、1つのセクションで実行する必要があるためです。

def __init__(self, trainingSamplesFolder='samples', maskFolder='masks'):
    self.trainingSamplesFolder = self.__getAbsPath(trainingSamplesFolder)
    self.maskFolder = self.__getAbsPath(maskFolder)

def __getAbsPath(self, path):
    if os.path.isabs(path):
        return path
    else:
        return os.path.join(os.path.dirname(__file__), path)

__getAbsPath(self, path)path パラメータが相対パスか絶対パスかを調べ、絶対バージョンの path . ですから、私は返された path を後で安全に使うことができます。

しかし、エラーが発生します。

NameError: 名前 '__file__' が定義されていません。

このエラーについてネットで検索したところ、以下のような解決策を見つけました。 sys.argv[0] を使用した方が良いという解決策を得ましたが print(sys.argv[0]) は返す

/usr/local/lib/python3.4/dist-packages/ipykernel/__main__.py

しかし、正しいノートブックの位置は /home/ubuntu/notebooks/ .

参照ありがとうございました 現在のIPythonノートブック名を取得する方法 Martijn Pieters(コメント)から最後の答え(受け入れられませんでした)は私のニーズに完全に適合します。

print(os.getcwd())

/ホーム/ubuntu/notebooks

どのように解決するのですか?

スクリプトが実行されているディレクトリのパスを取得したい場合は、この方法を使うことを強くお勧めします。

os.path.abspath('')

メリット

  • Jupyter Notebookから動作する
  • REPLから動作する
  • Python 3.4 の pathlib を必要としない。

なお、シナリオの1つである __file__ の利点は、ディレクトリAからpythonを起動し、ディレクトリBでスクリプトを実行している場合です。この場合、上記と他のほとんどのメソッドはBではなくAを返します。 .ipyn を起動したディレクトリではなく、常に jupyter notebook .