2017-12-11 35 views
0

私はかなり長い間、Pythonでいくつかの深刻な作業を行っているだけでなく、悩んでいます。しかし、私はまだそれに少しずつ問題があります。別のフォルダからPythonスクリプトをインポートする適切な方法

Pythonで作業するときは、PyCharm CEを使用するのが最も快適だとわかります。典型的なシナリオは、新しいvirtualenvを作成し、PyCharmを起動してそこに私のvirtualenvをオープンするというものです。そこから、オートパイロットのように、PyCharmは、site-packagesとPythonランタイムを使用して関連するすべての汚い作業を処理します。

私はいつも私のvirtualenvをきれいに整理しておきたいと思っています。私はしばしば自分のソースコードをサブモジュール/サブフォルダに意味論的に編成しています。だから私はいくつかのコード、またはクラス、または他のフォルダから何をインポートするたびに私はそれをインポートします。私はsome_script.pyに実装されA()という名前の関数を使用したい、foo.pyのどこかに、今

├── bin 
├── include  
├── lib   
└── src 
    ├── foo.py 
├── important_scripts 
    ├── some_script.py 
    └── some_other_script.py 
└── pip-selfcheck.json 

は、私は私の virtualenvで次のような構造を持っている想像してみてください。明白な方法は、 foo.pyに簡単な行を追加することです - from some_script import Aのようなものです。 PyCharmから私のコード(この場合は foo.py)を実行してデバッグすると、そのような作業は完璧です。

上記の典型的なシナリオとは対照的に、私はTerminal.appから同じことをしたかったのです。だから私は端末cdを私のvirtualenvに起動して起動します。次に、フォルダにあるvirtualenvのPython実行ファイルを使用して、foo.pyを実行しようとしています(これはPyCharmウィンドウからfoo.pyを右クリックして実行することと同等です)。残念ながら、私はエラーModuleNotFoundError: No module named 'some_script'を取得します。

シンプルなディテールなどが欠けていると思います。私が言ったように、それはPyCharmから実行すると魔法のように動作します。

とにかく、助言や助言は高く評価されます。前もって感謝します。

+0

[サブディレクトリからファイルをインポートする](https://stackoverflow.com/questions/1260792/import-a-file-from-a-subdirectory)を参照してください。 – Galen

答えて

0

ありがとうございました。オンラインでの調査中に、私はモジュールやパッケージをインポートするときに人々が多かれ少なかれ同じ問題を抱えているというさまざまな事例を経験しました。だから、これは私がそれを解決してきた方法です。

  • important_scriptsディレクトリの下に、私は__init__.pyという名前のファイルが含まれています。これは、基本的にPythonインタプリタに、実際には普通のサブディレクトリではなくPythonパッケージであることを伝えます。

    この__init__.py
  • 、私は、次の行が含まれている、つまり、私は機能Aインポートされるから、スクリプトに続いてラインでfoo.py

    from important_scripts.some_script import A 
    
  • を追加しました

    import os 
    import sys 
    sys.path.append(os.path.dirname(os.path.dirname(__file__))) 
    

    であり、基本的にvirtualenvsite-packagesに追加されています。

関連する問題