2017-08-02 4 views
0

たとえば、myprojectという名前のプロジェクトがあります。 myprojectディレクトリにあります。 otherサブディレクトリとmain.pyがあります。 otherサブディレクトリには、a.pyb.pyがあります。どのようにPythonのプロジェクト構造を整理するのですか?

a.pyの内容は

import b 

ある main.pyの内容は次のとおりです。main.pyでここ

from other.a import * 

問題が来る、私はfrom other.a import *を使用する場合、a.pyのコンテンツが含まれていますmain.pyを入力すると、b.pyotherになるので、main.pyにはimport bが間違っており、import other.bを使用する必要がありますが、a.pyにはimport bが必要です。したがって、これは矛盾します。どうすれば解決できますか?

+3

[Pythonプロジェクトの構造と相対的なインポート](https://stackoverflow.com/questions/34732916/python-project-structure-and-relative-imports)の可能な複製 –

+1

@MartinAlonsoあなたがリンクしている質問は、これです。 –

+0

パッケージ内に相対インポートは使用しないでください。 Python 3では、動作しません。Python 2では非推奨です。だから 'a.py'では'から 'を行う必要があります。 import bまたはimport other.bを指定します。 –

答えて

1

私はこれが正しいコード構造だと思いますか?

mypackage 
    other 
     __init__.py 
     a.py # import b 
     b.py # def func_b() 
    __init__.py 
    main.py # from other.a import * 

あなたは、このコードの構造を使用することができます。main.pyfrom .other import b:のような相対的なインポートを使用して、main.pyfrom mypackage.other import b

は、次のようなあなたのインストール可能なパッケージでABSOLUTE IMPORTを使用しないでください。

mypackage 
    other 
     __init__.py 
     a.py # from . import b 
     b.py 
    __init__.py 
    main.py # from .other.a import * 

、あなたはmain.pyでこれを行うことができます。

b.func_b(...) 

これをすることによって、あなたが持っているので、それは、from .other.a import *を行う基礎となるスクリプトを持ってtest.py

from mypackage import main 

main.b.func_b() 

from . import ba.pyに設定します。 *は実際にはbです。そのため、b.func_b()in main.pyを使用することができます。

関連する問題