2017-12-11 9 views
0

私は相対的な輸入品の一回限りの使用例を読み取る疲れているので、私は怒鳴る上のディレクトリからの相対インポートを行う方法の一例とを取得するために、質問として考え出しましたモジュール関数とクラスオブジェクトの両方をインポートするために使用します。のpython3相対輸入

ディレクトリ構造:

. 
├── lib 
│   ├── __init__.py 
│   └── bar.py 
└── src 
    ├── main.py 
    └── srclib 
     ├── __init__.py 
     └── foo.py 

bar.py

def BarFunc(): 
     print("src Bar function") 

class BarClass(): 
     def __inti__(self): 
       print("src Bar Class") 
     def test(self): 
       print("BarClass working") 

foo.py

def FooFunction(): 
     print("srclib Foo function") 

class FooClass(): 
     def __init__(self): 
       print("srclib Foo Class") 
     def test(self): 
       print("FooClass working") 

質問:これらのユースケースをインポートするPython 3の構文は何ですか?

main.py

# What is the syntax to import in python 3? 

# I want to be able to call FooFunc() 
foo.FooFunc() 

# I want to be able to create a FooClass() object 
foo_class = foo.FooClass() 
foo_class.test() 

# I want to be able to call FooFunc() 
bar.BarFunc() 

# I want to be able to create a BarClass() object 
bar_class = bar.BarClass() 
bar_class.test() 
+2

相対インポートはディレクトリに関するものではありません。これらはディレクトリトラバーサルメカニズムではありません。彼らは、ファイルシステム内のどこに位置するのではなく、インポートするものだけを言う。 – user2357112

+0

よろしくお願いします。それは知らなかった。私はまだ私のメインディレクトリ構造から私のlibファイルをどのようにインポートするのだろうかと思っています。 – 1N5818

+0

パッケージの一部ではないので、 'main.py'で相対インポートを実際に実行することはできません。 – user2357112

答えて

0

それはすべてあなたからあなたのpythonインタプリタを起動する場所によって異なります。あなたのケースでは、以下の変更をしながら、私はあなたのプロジェクトのルートディレクトリからのインタプリタを起動するために、あなたをお勧めします。ファイルで

src/srclib/__init__.py追加:

from . import foo 

をこのようにする理由は、明示的に述べることです__init__.pyモジュールからインポートするファイルを指定します。あなたのmain.pyファイルで

、次の行を追加します。

from lib import bar 
from src.srclib import foo 

は、この情報がお役に立てば幸い!