2016-03-24 12 views
1

正しく私のPythonモジュールを/usr/lib/python2.7/site-packages/mymodにインストールしました。 はしかし、私はpython setup.py installedモジュールがインストールされたリソースを見つけられないのはなぜですか?

python2 -m mymod 

でそれを実行しようとすると、それは/home/me/dev/mymod/mymod/ディレクトリからのみ実行され、私は他のディレクトリから同じことを行う場合には失敗しました。

IOError: [Errno 2] No such file or directory: 'mymod/data/icons/mymod.ico' 

それはそれで使用可能なすべての正しいパスを持っています

/usr/lib/python2.7/site-packages/line_profiler-1.0-py2.7-linux-x86_64.egg 
/usr/lib/python2.7/site-packages/textblob-0.11.1-py2.7.egg 
/usr/lib/python2.7/site-packages/nltk-3.2-py2.7.egg 
/usr/lib/python2.7/site-packages/pyCNN-0.0.0-py2.7-linux-x86_64.egg 
/usr/lib/python27.zip 
/usr/lib/python2.7 
/usr/lib/python2.7/plat-linux2 
/usr/lib/python2.7/lib-tk 
/usr/lib/python2.7/lib-old 
/usr/lib/python2.7/lib-dynload 
/usr/lib/python2.7/site-packages 
/usr/lib/python2.7/site-packages/gst-0.10 
/usr/lib/python2.7/site-packages/gtk-2.0 
/usr/lib/python2.7/site-packages/wx-3.0-gtk2 

それがあるときに、なぜそれが/usr/lib/python2.7/site-packages内部mymod/data/icons/mymod.icoを見つけることができません。私はmymod.pymymod/data/icons/data/iconsと異なるパスを使用しようとしましたが、何も役立ちません。

$ file /usr/lib/python2.7/site-packages/mymod/data/icons/mymod.ico 
/usr/lib/python2.7/site-packages/mymod/data/icons/mymod.ico: MS Windows icon resource - 1 icon, 128x128 

この問題はsetup.pyですべての私のpythonプロジェクトを悩ませてきたと私ははっきりとPythonモジュールを実行する必要があるかについて誤解するものがあると思います。

+0

として

from os import path datadir = path.join(path.dirname(__file__), 'data') icofile = path.join(datadir, 'icons', 'mymod.ico') 

サイトパッケージ/ mymod'?他のlibと比較してください。 – loutre

+0

'-rw-r - r - 'これは普通のユーザにとっては読み取り専用ですが、sudoでそれを実行しても役に立ちません。 – minerals

+0

エラーメッセージを見ると、あなたのモジュールは見つかったようですが、icoファイルのために失敗しました: ''mymod/data/icons/mymod.ico''。ファイルが存在することを確認してください。 – loutre

答えて

1

私は何とかあなたのローカルリファレンスが物事を乱していると思います。

別のディレクトリからpython -m moduleを起動すると、相対ファイル参照は、ファイルを必要とするモジュールではなく、作業ディレクトリからの相対パスであると解釈されることがあります。

は、次のようにモジュール - ローカルファイルを参照するために試してみて、それが問題を解決するかどうかを参照してください。/usr/lib/python2.7/ `のchmodコマンドは何提案in this answer.

+0

あなたは私の命を救いました。できます。 私は 'setup.py'がこれを自動的に処理しない理由を理解できません。なぜなら、bashスクリプトで同じことをすることができ、正しいシンボリックリンクを作成してすべてを束縛するからです。 – minerals

+0

これは意図された動作であるかどうかわかりません。それはpythonの* by design *のいずれかの側面でもあります。インポートされたモジュールがインストールディレクトリからではなく作業ディレクトリからの相対参照を使用する理由を誰かが知っている場合は、共有してください。 – jbndlr

+0

*相対ファイル参照は依然としてあなたの作業ディレクトリからの相対パスであると解釈される可能性があります。*相対パスは**常に**あなたの現在の作業ディレクトリからの相対パスです。ライブラリモジュールは、どのように指定されていない相対パスであるはずのベースディレクトリを基準にして相対的に決定する必要がありますか? – flaschbier

関連する問題