2016-04-14 10 views
0

私はPythonプロジェクトで関数のインポートを実行する必要があります。Pythonの親フォルダから関数をインポートするには?

私は答えがあまりにも具体的すぎる、あまりにも一般的すぎる、またはちょうど醜いので、残念なことに、残念なことに、私は私のための適切な解決策を見つけることができませんでしたハッキング(絶対パスでの操作など)私は./diffie_hellman/diffie_hellman.pyから./hashes/hash_function.pyをインポートする必要が

PythonClient:. 
│ .gitignore 
│ des.py 
│ des_test.py 
│ des_var2.py 
│ gui.py 
│ index.py 
│ __init__.py 
│ 
├───diffie_hellman 
│ │ diffie_hellman.py 
│ │ diffie_hellman_test.py 
│ │ __init__.py 
│ │ 
│ └───__pycache__ 
│   diffie_hellman.cpython-35.pyc 
│ 
├───hashes 
│ │ collision.py 
│ │ hash_function.py 
│ │ __init__.py 
│ │ 
│ └───__pycache__ 
│   hash_function.cpython-35.pyc 
│   __init__.cpython-35.pyc 
│ 
└───__pycache__ 
     des.cpython-35.pyc 
     des_var2.cpython-35.pyc 

:ここ

は次のように私のフォルダ構造がどのように見えるかです。

./hashes/hash_function.pyファイルには、hash_functionという名前の唯一の機能が含まれています。

私はかなり多くの方法でインポートを実行しようとしましたが、できませんでした。 私はいつものいずれかを取得

SystemError: Parent module '' not loaded, cannot perform relative import

私は私のimport文(すなわちfrom .hashes.hash_function

またはIで.を使用し、この取得:すべての__init__.pyファイルが空である

ImportError: No module named 'hashes'

を。

ここに私の試みのリストです:

  1. from hashes import hash_function

  2. from hashes.hash_function import hash_function

  3. from .hashes.hash_function import hash_function

  4. from ..hashes.hash_function import hash_function

  5. import hashes

  6. import hash_function

  7. from .. import hash_function

  8. from . import hash_function

  9. from PythonClient.hashes.hash_function import hash_function


私の問題を解決し、そのような輸入品で作業する方法を理解するのを助けてください。


PS:ソリューションはここstackoverflow.com/questions/14132789/

+1

最初にhttp://stackoverflow.com/questions/14132789/python-relative-imports-for-the-billionth-time#answer-14132912を読むことをおすすめします。あなたがそれを十分に慎重に読むと、Pythonのインポートの質問の99%を解決することができます。 – laike9m

答えて

1

あなたは__init__.pyを持っているという事実がPythonClientがライブラリ自身であることを私に伝え見つかりませんでした。 from PythonClient.hashes.hash_function import hash_functionを実行してください。私はいつも完全なパスが好きです。

ライブラリをインポートする前にインストールする必要があります。これにはホームディレクトリにsetup.pyファイルが必要です。その後、 `pip install -e 'のようにテストのためにライブラリをpipする必要があります。

+0

私のルートフォルダは 'PythonClient'と呼ばれます。しかし、 'PythonClient.hashes.hash_function import hash_function'を実行すると' ImportError: 'PythonClient''という名前のモジュールがありません –

+0

それは私に 'Directory'を与えます。インストールできません。ファイル 'setup.py'が見つかりません。 'setup.py'ファイルを作成しなければならない場合、どのようなものでなければならないでしょうか? –

+0

ありがとう、 'setup.py'を作成して問題を解決しました!あなたはあなたの答えを更新してください。そうすれば、私はそれを他人に見せてもらえるようにすることができますか? –

1

あなたはすでに回答を受け入れていますが、あまり「永続的な」解決策が望まれない場合は(つまり、にコードをインストールしたくない場合)、別のオプションとして、あなたのパスに対するあなたのPythonClientディレクトリの親。これは永久に(オペレーティングシステムによって異なります)、またはコードで一時的に行うことができます:

import os 
import sys 

p = os.path.abspath('../..') 
if p not in sys.path: 
    sys.path.append(p) 

from PythonClient.hashes.hash_function import hash_function 

乾杯!

関連する問題