14

有名なサードパーティのパッケージング システムを使用していくつかの python パッケージをパッケージ化していますが、エントリ ポイントの作成方法で問題が発生しています。

マシンにエントリ ポイントをインストールすると、エントリ ポイントには、次のように、任意の python インタープリターを指すシバンが含まれます。

/home/me/development/test/setup.py

from setuptools import setup
setup(
    entry_points={
        "console_scripts": [
            'some-entry-point = test:main',
        ]
    }
)        

/home/me/.virtualenvs/test/bin/some-entry-point : _

#!/home/me/.virtualenvs/test/bin/python
# EASY-INSTALL-ENTRY-SCRIPT: 'test==1.0.0','console_scripts','some-entry-point'
__requires__ = 'test==1.0.0'
import sys
from pkg_resources import load_entry_point

sys.exit(
   load_entry_point('test==1.0.0', 'console_scripts', 'some-entry-point')()
)

ご覧のとおり、エントリ ポイントのボイラープレートには、サードパーティ パッケージの作成に使用している仮想環境にある Python インタープリターへのハードコーディングされたパスが含まれています。

サードパーティのパッケージング システムを使用してこのエントリ ポイントをインストールすると、マシンにエントリ ポイントがインストールされます。ただし、ターゲット マシンに存在しない Python インタープリターへのこのハードコーディングされた参照では、ユーザーは を実行する必要がありますpython /path/to/some-entry-point

シバンにより、これはかなり移植性が低くなります。(これは確かに virtualenv の設計目標ではありませんが、ここではもう少し移植性を高める必要があります。)

私は狂った find/xargs/sed コマンドに頼りたくありません。(それは私のフォールバックですが。)

setuptoolsフラグまたは構成を使用してシバンの後にインタープリターのパスを変更できる方法はありますか?

4

3 に答える 3

23

「sys.executable」を設定することで、console_scripts のシバン行をカスタマイズできます ( debian バグ レポートからこれを学びました)。つまり…

sys.executable = '/bin/custom_python'

setup(
  entry_points={
    'console_scripts': [
       ... etc...
    ]
  }
)

ビルド時に「実行」引数を含める方が良いでしょう...

setup(
  entry_points={
    'console_scripts': [
       ... etc...
    ]
  },
  options={
      'build_scripts': {
          'executable': '/bin/custom_python',
      },
  }
)
于 2013-06-26T20:07:42.953 に答える
2

を変更せずに実行時にこれを実行したい人のための将来の参考のために、次のように経由でsetup.pyインタープリターパスを渡すことができます。setup.py buildpip

$ ./venv/bin/pip install --global-option=build \
--global-option='--executable=/bin/custom_python' .
...
$ head -1 ./venv/bin/some-entry-point
#!/bin/custom_python
于 2016-06-23T09:19:41.223 に答える
1

setup.pyのシバンを、エントリ ポイントで使用する python に一致するように変更するだけです。

#!/bin/custom_python

(@damian answer を試しましたが、うまくいきませんでした。Debian Jessie の setuptools のバージョンが古すぎるのかもしれません)

于 2016-12-27T18:47:12.210 に答える