8

Pythonのsqlalchemyツールであるalembicを使用しようとしています。コマンドを入力すると、内部に py ファイルを含むフォルダー「alembic」が生成されます。内部の py ファイルは、「myapp」という別のフォルダーにあるアプリケーションにリンクする必要があります。しかし、私はそれをリンクすることはできません。存在しないと表示され、相対インポートが機能しません。

そのため、 myapp/configs/config.pyファイルから構成クラスをインポートする必要があります。

/apps
+--/alembic
|----env.py <--- the calling file
+--/myapp
|----configs/__init__.py <--- has "DefaultConfig" class imported
|----configs/config.py <--- I want to import the class inside here.

env.py 内:

from myapp.configs import DefaultConfig

うまくいきません。

私は試した:

from ..myapp.configs import DefaultConfig

失敗。

alembic ドキュメントのコード例では、「myapp.whatever」を使用するだけです。

「/apps」と「/myapp」を環境変数の PYTHON_PATH に追加しました。

エラー例:

File "D:\apps\myapp\lib\site-packages\alembic\command.p
y", line 97, in revision
    script.run_env()
  File "D:\apps\myapp\lib\site-packages\alembic\script.py
", line 191, in run_env
    util.load_python_file(self.dir, 'env.py')
  File "D:\apps\myapp\lib\site-packages\alembic\util.py",
 line 186, in load_python_file
    module = imp.load_source(module_id, path, open(path, 'rb'))
  File "alembic\env.py", line 5, in <module>
    from ..myapp.configs import DefaultConfig as conf
ValueError: Attempted relative import in non-package
4

2 に答える 2

0

myapp自己完結型のアプリケーションですか、それとも Django を使用して見つけることができるようなサブアプリケーションですか? それが自己完結型のアプリである場合、あなたはちょっと間違ったことをしている. 本当にやりたいことは、アプリが持つ依存関係をインストールして、相対インポートなどを使用せずにそれらにアクセスできるようにすることです (これは、特に自分以外の誰かがアプリを使用している場合は悪い習慣です)。

おそらくやりたいこと(自己完結型の場合):

  • アプリ用の仮想環境をセットアップします ( virtualenvwrapper の使用を強くお勧めします。これについては、新しくできた (そして不完全な) ブログで書いたばかりです: http://demianbrecht.github.com/posts/2013/01/02/ virtualenvwrapper/
  • alembic依存関係としてインストールします。pip install alembic
  • ファイルを作成しrequirements.txtます。pip freeze > requirements.txt

これで、プロジェクト内のどこからでもalembic via を使用できるようになりimport alembicます。

編集

ディレクトリ構造も少し不安定です。myappアプリ固有のモジュールをすべて別のサブディレクトリに配置する必要があります。

myapp
    myapp
        __init__.py
        configs/__init__.py

これは、 を介してアプリからモジュールを追加myappし、PYTHONPATHインポートできるようにするためですfrom myapp import foo。現状では、 が にある場合myappPYTHONPATH2 番目の名前空間レベル (つまり ) からのみサブモジュールにアクセスできますimport configs。これは明らかな理由で悪いことです。

于 2013-02-04T08:01:39.323 に答える