2016-07-02 6 views
3

私は別のマシンに簡単に配布してインストールすることができる最初のpythonモジュールを作成しようとしています(うまくいけば、リポジトリをクローンしsetup.pyを実行するだけです)。問題は、私のモジュールが小さなバイナリファイルに依存していることです。私は依存関係の1つとしてSeleniumモジュールを使用しており、クロム用ウェブドライバ(http://chromedriver.storage.googleapis.com/index.html?path=2.22/)が必要です。バイナリをPythonモジュールに組み込むことは、これを行うことをお勧めしますか?

私はリポジトリに異なるバイナリを含め、Pythonでシステムプラットフォームを決定し、正しいバイナリを選択し、システムパスに追加してから通常どおりモジュールをインストールします。

これは簡単ですか?さらに重要なのは、これは実際には良い習慣であるか、それともより良い選択肢があるのでしょうか?バイナリファイルを別々にダウンロードし、モジュールを実行したい各マシンのシステムパスに追加する必要がありますが、私はむしろ規約違反にはなりません。

+3

あなたのバイナリはインタープリタ固有であり、あなたのモジュールにバイナリを含めることはお勧めできません。あなたのeggやsetup.pyはバージョン、依存関係、ファイルのコピーを行うべきです。 http://stackoverflow.com/questions/2026395/how-to-create-python-egg-file – dmitryro

+0

あなたのお返事ありがとうございますdmitryro!だから私はあなたのことを理解しているなら、私のsetup.pyファイルは、必要なファイルを特定し、それを直接ダウンロードするのではなく、ソースのすべてのバイナリを含めてからダウンロードする必要があります。私はそれについてどうやって行くのか本当に分かりません... –

+1

はい。 – dmitryro

答えて

1

ivan_pozdeevとdmitryroのコメントに基づいて、これは私が現時点で出ているソリューションです:私のプロジェクトディレクトリ内

はサブフォルダlinux32 /、LINUX64 /、mac32 /とフォルダのbin /で、Win32の/。これらのサブフォルダのそれぞれには、適切な実行可能ファイル(chromedriver/cromedriver.exe)があります。私は私のsetup.pyスクリプトに以下の行を追加した

:セットアップ()関数を呼び出して、

import platform 

# Determine the correct platform for the webdriver 
system = platform.system() 
arch, _ = platform.architecture() 
if system == 'Linux': 
    if arch == '64bit': 
     webdriver = 'bin/linux64/chromedriver' 
    else: 
     webdriver = 'bin/linux32/chromedriver' 
if system == 'Windows': 
    webdriver = 'bin/win32/chromedriver.exe' 
if system == 'Darwin': 
    webdriver = 'bin/mac32/chromedriver' 

その後、私は単に後にキーワード引数

scripts=[webdriver], 

を追加しますいくつかの簡単なテストでは、これは正しい実行可能ファイルをシステムのパスにコピーして、普通のようにpythonモジュールをインストールするようです。

関連する問題