10

プロジェクトのセットアップ プロセスの一環として、パッケージの 1 つを指定したディレクトリにシンボリック リンクして、init.d スクリプトがそれを見つけられるようにする必要があります。これを後処理コマンドとして追加する方法はありますsetup()か? リンクを作成する別のファイルを作成し、それをsetup()「これらを実行する」という kwarg リストの一部として渡すことにしました (そのようなオプションが存在する場合)。

setup(
    ...
    packages = find_packages('src'),
    package_dir = {'': 'src'},
    install_requires = ...,
    data_files = [('/etc/init.d', ['scripts/foo'])],
    ...
)

そのfooスクリプトは、からのパッケージの 1 つが別のsrc/ディレクトリにシンボリック リンクされていることを期待します (たとえば、単に on ではありませんPYTHONPATH)。それを達成する方法はありますか?

4

3 に答える 3

9

この投稿が数年前のものであることは承知していますが、後処理コードが setup.py で可能であるという更新を提供したかったのです。簡単に言うと、setuptools のインストール機能をオーバーライドする必要がありますが、それ以降は、MANIFEST.in がコピーを拒否するシンボリック リンクをコピーするなど、必要なコードを追加できます。Peter Lamut's solutionから取得。

from setuptools.command.install import install

class CustomInstallCommand(install):
    """Customized setuptools install command - prints a friendly greeting."""
    def run(self):
        print "Hello, developer, how are you? :)"
        install.run(self)
        #post-processing code
setup(
    ...
    cmdclass={
        'install': CustomInstallCommand,
    },
    ...
)
于 2014-10-21T15:45:38.767 に答える
4

現在、プラットフォーム固有のパッケージ管理ツール (RPM、deb、win32 インストーラーなど) のみがインストール後の手順を実行できます。distutils、setuptools などはこれを直接サポートしていません。(RPM、Windows インストーラーなどのビルドを許可する範囲を除く)

したがって、プラットフォーム固有のインストーラーを使用せずにこれを行う最も簡単な方法は、独自のポストインストール スクリプトを作成するか、既存のスクリプトにポストインストール オプションを追加して、ユーザーにそれを実行するように指示することです。それ以外の場合は、bdist_rpm またはその他の bdist コマンドのいずれかを使用して、適切なプラットフォーム用のインストーラーをビルドする必要があります。

于 2010-01-29T17:36:42.530 に答える
0

@pjeby の回答を拡張して、インストール コマンドを拡張して、独自のカスタム ポストインストール ステップを追加することもできます。ただし、これはソースからインストールする場合 (つまり、setup.py を実行する場合) にのみ機能し、RPM や MSI などの他のインストーラーは変更を黙って無視します。

編集: いくつかのグーグルの後にこれを見つけました。自分でシンボリックリンクを作成しようとするべきではないようです: http://docs.python.org/2/install/index.html#alternate-installation

于 2013-03-20T12:28:27.323 に答える