5

コードをリファクタリングしようとしています(コアモジュールの束と、共通のディレクトリにあるいくつかのアプリ)。この構造を取得したい

Root
   __init__.py
   Core
       __init__.py
       a.py
       b.py
       c.py
   AppOne
       __init__.py
       AppOne.py
   AppTwo
       __init__.py
       AppTwo.py
   AppThree
       __init__.py
       AppThree.py

ここAppOne.pyで、、AppTwo.pyおよびAppThree.pyモジュールをインポートし、パッケージ内にインポートします。abcCore

__init__.pyファイルとインポートステートメントの書き方がわかりません。http://docs.python.org/tutorial/modules.htmlhttp://guide.python-distribute.org/creation.htmlを読み ました。「非パッケージで相対インポートを試行しました」や「無効な構文」などのエラーが発生しました

4

3 に答える 3

5

Pythonモジュールのディレクトリをsysパスに追加する必要があります。

あなたがこのようなものを持っているなら

Root
   here_using_my_module.py
   my_module
       __init__.py  --> leave it empty
       a.py
       b.py
       c.py

モジュールディレクトリをsys_pathに追加する必要があります

//here_using_your_module.py
import os, sys

abspath = lambda *p: os.path.abspath(os.path.join(*p))

PROJECT_ROOT = abspath(os.path.dirname(__file__))

sys.path.insert(0,PROJECT_ROOT)

import a from my_module

a.do_something()
于 2012-05-17T22:53:02.027 に答える
1

正確なディレクトリ構造がある場合は、相対インポートを使用して親フォルダからインポートできます。

from ..Core import a
于 2012-05-18T00:40:33.697 に答える
1

AppOne.py内:

import os
os.chdir("..")

from Core import a

または、AppOne.pyに次のように書き込むこともできます。

import sys
sys.path.insert(-1,"..")

from Core import a
于 2012-05-17T22:54:30.967 に答える