2012-07-23 23 views
21

は、この構造は、それを行うための標準的な方法であると思われますmycore.pyのでmyscriptで使用できますか?pythonでbinフォルダ内のスクリプトからパッケージ/モジュールをインポートする方法

両方__init__.pyファイルが空です。

のMyScriptの内容:core.py

def main(): 
    print 'hello' 

#!/usr/bin/env python 
from mypackage import core 
if __name__ == '__main__': 
    core.main() 

コンテンツ私はmyprojectにディレクトリ内からのMyScriptを実行すると、私は次のエラーを取得する:

Traceback (most recent call last): 
    File "bin/myscript", line 2, in <module> 
    from mypackage import core 
ImportError: No module named mypackage 

何私は行方不明ですか?

+0

あなたの 'sys.path'の値(' PYTHONPATH'環境変数か、Pythonコードで実行時に変更されます)は、 'import'がどこを検索するかを決定します。 – Borealid

+2

'setup.py'で' entry_points ["console_scripts]]' 'を使うことを検討してください。 – kojiro

+1

'setup.py'の内容は何ですか?そしてそれはmyprojectディレクトリにありますか? – mgilson

答えて

4

通常、setup.pyは、Pythonインタプリタが見つかる場所にパッケージをインストールする必要があります。インストール後には、import mypackageが動作します。開発ツリーのbinにあるスクリプトの実行を容易にするため、通常binディレクトリに../mypackage/というシムリンクを追加するだけです。もちろん、これはシンボリックリンクをサポートしているファイルシステムを必要とし...

+0

あなたが示唆しているようにシンボリックリンクを使用すると、スクリプトはmypackageを見つけることができましたが、別の問題に遭遇しました...質問の上記の編集を参照してください。 –

+6

開発に「巧妙な」シンボリックリンクを使用する代わりに、[virtualenv](http://pypi.python.org/pypi/virtualenv/)を使ってdistutilsにあなたのパスに実行可能ファイルをインストールさせるには 'python setup.py develop'を実行してください(あなたがそのvirtualenvを起動したとき) – SingleNegationElimination

+0

実際には、私はそれを他の問題として考え出しました。 –

0

は、私が「最良の選択」があるかどうかわからないんだけど、次は私の通常の練習です:私は実行したいものは何でもスクリプト

  1. 入れscript.pyにインポートするときに/ binに

  2. はDIR myproject内

  3. を "のpython -m bin.script" を行い、script.pyがrootとして座っているディレクトリを考えます。システムがシンボリックリンクをサポートしているので、もし

    from ..mypackage import core 
    

、それがより良い選択です。

関連する問題