3

このディレクトリ構造とこれらのファイルを含む python プロジェクトがあります。

/home/project_root
|---__init__.py
|---setup
       |---__init__.py
       |---configs.py
|---test_code
       |---__init__.py
       |---tester.py

テスター スクリプトは、「setup.configs」を参照して setup/configs.py からインポートします。私の開発マシンでは問題なく動作します。

これは、開発 (Linux) コンピューターで機能します。これを別の (Linux) コンピューターに移動するときは、PYTHONPATH を次のように設定します。

PYTHONPATH = "/home/project_root"

しかし、tester.py を実行すると、configs モジュールが見つかりません。また、インタラクティブな Python インタープリターを実行すると、sys.path に /home/project_root ディレクトリが含まれません。しかし、$PYTHPATH を echo すると /home/project_root が表示されます。

ここで何が間違っていますか?

(ターゲット マシンの PYTHONPATH を設定するために .bashrc ファイルに依存したくありません。コードは Django アプリケーション用であり、最終的には www-data によって実行されます。また、Apache の構成がDjango には PYTHONPATH の仕様が含まれていますが、ターゲット マシン環境でコードが単体テストに合格することを最初に確認しようとしているため、ここでは使用したくありません。)

CURIOUSER と CURIOUSER これは、ユーザー ID と権限の問題のようです。- 通常のユーザーからのコマンドで起動すると、インタープリターは期待どおりにモジュールをインポートできます。- sudo (ここでは Ubuntu を実行しています) で起動すると、インタープリターは期待どおりにモジュールをインポートできません。- ファイルは www-data によって所有されているため、sudo を使用してテスト スクリプトを呼び出しています (b/c Django アプリケーションの一部として apache を実行しているユーザーによって呼び出されます)。- ファイルの所有権を通常のユーザーの所有権に変更した後、テスト スクリプトインポート エラーなしで実行されます (ただし、すべての種類のユーザー ID 関連の壁に)。

お時間を無駄にして申し訳ありません。 この質問はクローズする必要があります。

4

3 に答える 3

4

これをテスタースクリプトの直前に貼り付けますimport setup.configs

import sys
import os
sys.path.insert(0, os.path.join(os.path.dirname(__file__), os.path.pardir))

sys.pathは、PythonモジュールをインポートするときにPythonインタープリターが検索するすべてのディレクトリのリストです。これにより、セットアップモジュールを含む親ディレクトリがそのリストの先頭に追加されます。これは、ローカルディレクトリが最初にチェックされることを意味します。モジュールをシステム全体にインストールしている場合、これは重要です。詳細については、sysdocをご覧ください。

編集: .pthファイルを入れることもできます/usr/local/lib/python2.X/site-packages/。.pthファイルは、Pythonインタープリターが検索する各行にディレクトリパスを持つ単純なテキストファイルです。したがって、この行を含むファイルを追加するだけです。

/ home / project_root
于 2009-09-02T17:51:19.700 に答える
0

スクリプトでPythonパスを明示的に設定してみてください。変更する必要がない場合は、いつでも「../」のようなものをテスターのパスに追加できます。つまり、次のようになります。

sys.path.append("../")
于 2009-09-02T17:51:04.253 に答える
0

(ターゲット マシンの PYTHONPATH を設定するために .bashrc ファイルに依存したくありません。コードは Django アプリケーション用であり、最終的には www-data によって実行されます。また、Apache の構成がDjango には PYTHONPATH の仕様が含まれていますが、ターゲット マシン環境でコードが単体テストに合格することを最初に確認しようとしているため、ここでは使用したくありません。)

コードが Django アプリケーション用である場合、Django プロジェクトのコンテキストでテストしていない理由はありますか? Django プロジェクトのコンテキストでテストすると、次のような利点があります。

  1. Djangomanage.pyが Python 環境をセットアップします。適切なプロジェクト パスが に追加sys.pathされ、環境変数がDJANGO_SETTINGS_MODULE正しく設定されます。
  2. Django のライブラリには十分な単体テスト機能が含まれており、その機能を簡単に拡張して独自のテスト機能を含めることができます。Django プロジェクトでテストを実行することは、 を介して単一のコマンドを実行するのと同じくらい簡単manage.pyです。
于 2009-09-02T18:39:59.897 に答える