2017-09-10 26 views
2

awesomepkgsetup.pyのパッケージがあります。私は、ユーザがpip install awesomepkgを実行したときにバイナリ実行可能ファイルawesometoolをパッケージ自体とともにコマンドラインにインストールしたいと思います。 awesometoolの異なるOSバージョンをコンパイルしました。これはというフォルダの中にsetup.pyという名前で存在します。Pythonパッケージセットアップスクリプトバイナリ実行可能ファイルをインストール

しかし、私はsetup.pyを設定する良い方法が見つかりません。私は、次のことをしようとしています

  1. setup()scripts=[]キーワードを使用します。残念ながら、 "実行可能ファイル"はPythonスクリプトでなければなりません。

  2. 私はos.system('bin/awesometool')を使用してPythonスクリプトでバイナリをラップしようとします。また、wrapperスクリプトはpipによって他の場所にコピーされるため、失敗します。したがって、相対パスbin/awesometoolがどこにあるかはわかりません。

  3. もう1つの潜在的な解決策は、data_filesキーワードです。ただし、何らかの理由でpython setup.py bdist_wheelが実行されても、データファイルはsite_packagesインストールディレクトリにコピーされません。

参考:私はちょうどこの問題に自分自身を走ったhttps://docs.python.org/3/distutils/setupscript.html

答えて

4

。私の解決策は3倍だった。

  1. このプログラムを追加しました。 awesometoolを私のパッケージ構造に追加しましたので、package_dataというキーワードで追加できます: package_data={'awesomepkg': ['awesometool']}。 これは、実際にインストール中にinit .pyメインと同じフォルダにコピーされます。

  2. 手順2と同様のPythonスクリプトを作成しました。ただし、相対パスではなく、最初にawesomepkgをインポートし、パッケージのインストールフォルダへの絶対パスを取得するためにawesomepkg.__path__を使用します。これは次のようになります。

    import awesomepkg 
    import subprocess as sp 
    import sys 
    
    path = awesomepkg.__path__[0] 
    command = path + "/awesometool" 
    sp.call([command] + sys.argv) 
    

    私はシステムの代わりにサブプロセスを使用しましたが、結果は同じでなければなりません。

  3. 私はまもなくそれを合計するに言えば、あなたは)Pythonラッパースクリプトを作り、 `セットアップ(の` scripts`のkeyworkdにそれを追加したsetup()

+1

scriptsキーワードにこのスクリプトを追加しました'。 – konstunn

+0

私はここで問題に遭遇しました。バイナリファイルの所有権のために 'Permission denied'というエラーが出ます。どうすればこの問題に取り組むことができますか? – konstunn

関連する問題