0

フラスコ/ヘロク/github ビジネス全体の初心者ですが、数年前から Python を使用しており、tortoise SVN の経験がありました。このリンクhttps://devcenter.heroku.com/articles/pythonでコードを heroku にプッシュする方法に関するチュートリアルに従っています。しかし、私は間違いなく何かを逃しました。

現在、プロジェクト内には、さまざまなプロセス (Web サービス呼び出しやデータベース処理など) を整理するためのファイル構造があります。これらは、次のようなコードによってメイン アプリにインポートされます。

## Webservices
dirname, filename = os.path.split(os.path.abspath(__file__))
WSdirname = dirname + '\\WebServices\\'
sys.path.append(WSdirname)

import WebservicesModule as WSmodule # Module resides in "WebSerivices" folder

これは、ファイルが次のような構造に格納されていることを意味します

AppFolder\
    app.py
    WebServices\
        WebservicesModules.py
        ...
    Database\
        DatabaseModules.py
        ...

これはローカルで機能します。ただし、git によって heroku にプッシュされると、コードがWebservicesModuleモジュールにアクセスできないように見えます。フォームにエラーを与える

インポート エラー: WebservicesModule という名前のモジュールがありません。

なぜ私がこのファイル構造を持っているのかを説明するには; 多数の Web サービスが必要になるため、それらを同じフォルダーに含める方が簡単です。データベース操作などについても同様です。

私の質問はこれです。私のコードは悪い習慣ですか、つまりherokuはそれを許可していませんか? または、git ハブがファイルを heroku にアップロードしていないため、(マスター ディレクトリのファイル構造にあるにもかかわらず) ファイルを見つけることができませんか? それとも、私が知らない問題がありますか?これらのモジュールをコードで宣言しているにもかかわらず、requirements.txt で依存関係として宣言する必要がありますか?

あなたが提供できるどんな助けにも乾杯:)!

4

1 に答える 1

1

問題は、ローカルでWindowsで開発しているのに対し、HerokuのナメクジはLinuxのいくつかのバリアントを使用していることです。 \Windowsでは/ディレクトリセパレータですが、Linuxではディレクトリセパレータです。

パスとサブディレクトリを結合するためにハードコーディング\WebServices\を使用するのではなく、次のようにします。os.path.join

WSdirname = os.path.join(dirname, "WebServices")

これにより、展開先のプラットフォームに関係なく、正しいディレクトリセパレータが使用されるようになります。

于 2013-02-28T03:03:35.647 に答える