2

Web.Py を使用して、Python で基本的なブログ アプリケーションを作成しようとしています。ディレクトリ構造なしで始めましたが、すぐに必要になりました。だから私はこの構造を作成しました:

Blog/
├── Application/
│   ├── App.py
│   └── __init__.py
|
├── Engine/
│   ├── Connection/
│   │   ├── __init__.py
│   │   └── MySQLConnection.py
│   ├── Errors.py
│   └── __init__.py
├── __init__.py
├── Models/
│   ├── BlogPostModel.py
│   └── __init__.py
├── start.py
└── Views/
    ├── Home.py
    └── __init__.py

start.pyimportsApplication.Appには Web.Py のものが含まれており、 imports には import がありBlog.Models.BlogPostModelますBlog.Engine.Connection.MySQLConnectionApplication.App輸入販売も行ってEngine.ErrorsおりViews.Homeます。これらのインポートはすべてコンストラクター内で行われ、すべてのファイル内のすべてのコードはクラス内にあります。を実行するpython start.pyと、次の 3 行のコードが含まれます。

from Application import App
app = App.AppInstance()
app.run()

次のスタック トレースが出力されます。

Blog $ python start.py 
Traceback (most recent call last):
  File "start.py", line 2, in <module>
    Blog = App.AppInstance()
  File "/home/goktug/code/Blog/Application/App.py", line 4, in __init__
    from Blog.Views import Home
ImportError: No module named Blog.Views

しかし、いくつかの調査から私が理解していることによると、少なくとも App.py の後に到達するまで、これは実行されるはずです。どこで間違いを犯したか誰にもわかりますか?(リクエストに応じてより多くのコードを提供できますが、今のところ、これはますます混乱しているため、ここで停止します)。

4

2 に答える 2

1

Blogモジュールの親ディレクトリ (Blogそれ自体ではない) が python のパス上にある場合にのみ、モジュールをインポートできます。

あなたのようにディレクトリからプログラムを実行する場合、次のように直接Blogインポートすることしかできません。ViewsApplication.App

from Views import Home

それ以外の

from Blog.Views import Home

あなたのApplication/App.py

于 2012-11-04T17:47:20.847 に答える
1

App.pyステートメントを含む

from Blog.Views import Home

そのBlogため、Python がモジュールを検索するディレクトリのリストの中にある必要があります ( sys.path)。いろいろアレンジできるものですね。

  1. でアプリを起動しているためpython start.py、 を含むディレクトリstart.pyが自動的に検索パスに追加されます。だからあなたは変わることができます

    from Blog.Views import Home
    

    from Views import Home
    
  2. もう 1 つのオプションは、ディレクトリstart.pyから 1 レベル上に移動すること です。Blog次に、 を呼び出すpython start.pyと、 を含むstart.pyディレクトリも を含むディレクトリになりますBlog。したがって、PythonはBlog実行時に見つけるでしょうfrom Blog.Views ...

  3. Blog最後に、ディレクトリを PYTHONPATH 環境変数に追加できます。

于 2012-11-04T17:48:52.987 に答える