2011-10-28 4 views
1

私はPythonで私の最初のプロジェクトをコーディングしていますが、インポートをどのように処理するかはわかりません。私は私の大学のコンピュータで作業しており、PYTHONPATH変数を変更することはできません。私はまた、さまざまなコンピュータ/ OSからこのプロジェクトに取り組んでいます(プロジェクトへのパスは必ずしも同じではありません)。PYTHONPATHを変更できない場合、Pythonで他のモジュールをインポートする最良の方法は?

私はお互いにインポートする異なるフォルダにいくつかの異なるモジュールを持っています。現在私はfile_path = os.path.abspath(__file__)を使って別のモジュールへのパスを取得してから、ディレクトリを逆戻りして、目的のモジュールを含むフォルダを追加します。これは、sys.path.append(symantic_root)でPYTHONPATHに追加されます。

このシステムは動作しますが、それは非常に厄介見終わると重複コードの多くは、例えば、各モジュールの先頭であり:

import os 
import sys 
# Get the path to the directory above the directory this file is in, for any system 
file_path = os.path.abspath(__file__) 
root_path = os.path.dirname(os.path.dirname(file_path)) 
# Get the paths to the directories the required modules are in 
symantic_root = os.path.join(root_path, "semantic_analysis") 
parser_root = os.path.join(root_path, "parser") 
# Add the directories to the path variable 
sys.path.append(symantic_root) 
sys.path.append(parser_root) 
import semantic_analyser 
import jaml 

プロジェクトを構築するためのより良い方法上の任意のアドバイスこのようなことは非常に高く評価されます。

答えて

1

まず、単純なmain.pyスクリプトを作成して、アプリケーションに単一のエントリポイントを提供します。たとえば:

if __name__ == '__main__': 

    import sys 
    from package import app 

    sys.exit(app.run()) 

次に、トップレベルのパッケージを一緒のグループ、すべてのモジュールを作成し、main.pyと同じディレクトリでのためのアクセスポイントを提供します。すべてのパス操作コードを削除し、アプリケーション内の任意のモジュールからfrom package.module import functionなどの完全指定のインポート文を使用するだけで済みます。

+0

ご返信ありがとうございます。私はちょうどあなたが「アクセスポイントを提供する」と言ったときに、あなたが何を意味するのかを迷っているだけです。これは__init__.pyファイルと関係がありますか? –

+0

@Alty。あなたはモジュールの現在のフォルダをどの程度まで再構成できるのかをあなたの質問で明確にしておらず、あなたが使っていたものが何であるか分からなかったので、 "アクセスポイント"は単純なディレクトリかシンボリックリンクなどがあります。キーとなるのは、すべてのモジュールを1つのパッケージの下にまとめる方法を見つけることです。それから、管理が簡単になります。 – ekhumoro

1

まず、あなたは、次のドキュメント内のPythonパスについてのもののいくつか読んでください:あなたはおそらくPTHを使用することができ、あなたの問題を解決するために

を(python-search-path )ファイルには、必要なモジュールが存在するパスのリストが含まれています。

次にyoウルメインスクリプト自動的PYTHONPATHにそのディレクトリを追加します

import site 
site.addsitedir(".") 

を行うことができます。

0

作業しているOSについては言及していませんでした。この答えの多くは、Linux(またはUnixライクな)環境を前提としています。 Windowsの場合は、他の人がチャイムでチャイムする必要があります。

あなたの例から、これらの歪みをすべて克服する理由は明らかではありません。まず、PYTHONPATHはどのように変更できませんか?これは単なるシェル環境変数です。ログインしてPythonを走らせることができれば、あなたは自分の環境変数を設定するために必要なアクセス権を持っていることがわかります。

しかし、私はそれが必要であるかどうかもわかりません。あなたはまたに見てみたいことがあり

import site 
import os 

site.addsitedir(os.path.expanduser('~/lib/python')) 

:あなたは、単に独自のライブラリディレクトリにカスタムモジュールのすべてをインストールし、viniliosによって示唆されているように.pthファイルをインストールした場合、あなたはこのような何かを単に行うことができますvirtualenvパッケージを使用して、独自のパッケージをインストールできる独自のPython環境を作成することができます。システムPythonで利用できないモジュールをインストールする必要があるときは、非常に便利です。

関連する問題