5

コードのどこかに実行可能ファイルを呼び出すパッケージがあるとしましょう(たとえば、サードパーティのc / java-program)。さらに、アプリケーションがパッケージにバンドルできるほど小さい/些細なものであると仮定しましょう。たとえば、単一の実行可能ファイル(cfoo)。

先に進んで、ファイルを次の構造に配置することができます。

.
|-- foo
|   |-- __init__.py
|   |-- __init__.pyc
|   |-- core.py
|   |-- corebin
|   |   `-- cfoo
|   `-- foomain.py
`-- setup.py

そして、次のように準備setup.pyします。

from setuptools import setup

setup(
    name='foo',
    version='1.0',
    packages=['foo'],
    scripts=['foo/foomain.py'],
    package_data={'foo': ['corebin/*']},
    zip_safe=False
)

これにより、パッケージを正しくインストールできます。後で、パッケージコードでこれを行うことができます:

from subprocess import call

import pkg_resources as res

def main():
    fn = res.resource_filename('foo', 'corebin/cfoo')
    print "Resource located at:", fn
    call([fn])

残念ながら、実行可能ファイルは実行可能フラグを設定せずにインストールされます。元のファイルに設定されていても。chmodスクリプトの最後に呼び出しを追加するのsetup.pyは簡単ではありません。最初に適切なインストールパスを把握する必要があるからです。試してみましresource_filenameたが、ローカルファイルが返されました(「プレインストール」のように)。

この問題はどのように解決できますか?またvirtualenv、念頭に置いて...

4

1 に答える 1

2

私は自分のコメントを回答に昇格させています:

キーワードを使用してインストールするとscripts、正しいモードになります(適切なbin /ディレクトリにインストールされます)。

インストール後、パッケージ内に含まれるファイルに対してどのように実行しますか?

この質問は同じ状況に対処しているように見え、妥当な答えがあるように見えます。

于 2011-11-08T16:57:09.070 に答える