2011-10-09 44 views
7

私はPythonプログラマーです。完全に実行可能でなくても、自分のソフトウェアをクライアントに配布するための実行可能なバイナリをビルドしようとしています。エンドユーザーには便利です。Python - 実行可能ファイルの作成に問題がある

私は既にPyInstallerとPy2Exeを試していますが、私は特定のソフトウェアで同じ問題に直面しています。

私のプログラム(もちろんSeleniumのような他のフレームワークとやりとりするための新しい高レベルのフレームワークです)のためにsplinterモジュールを使いました。コンパイルしようとするたびに "webdriver.xpi"それは常に最終パッケージから除外され、プログラムがウェブドライバを実行しようとするとIOエラーが発生し、 "webdriver.xpi"というファイルが見つからないというメッセージが表示されます。すべてが完璧に動作します。

手動でも含める方法はありますか?私は手動で特定のフォルダ@ library.zipファイルを参照してそれを含めることを試みたが、それは動作しませんでした。

私はこの問題について本当に専門家ではなく、すべてを構築するためにGUI2Exeに依存しています。これを解決する方法については可能な限りアドバイスをいただきたいと思います。

ありがとうございました。

+0

あなたはsetup.pyスクリプトを表示することができますpy2exeに使用されますか? – chown

+0

ファイルを実行する前にアプリケーションディレクトリにファイルを追加できませんか? – Fenikso

答えて

1

setup.pyには、配布ファイルにリソースファイルを含めるよう指示が必要です。これを行うにはいくつかの方法があります(distutils、setuptools、distributeを参照してください)。py2exe wikiにはexampleがあります。

リソースをexeファイルと同じディレクトリにインストールする場合は、this py2exe tipを使用してリソースを見つける必要があります。

this answerを参照してください。配布ファイルにリソースファイルを含めるための追加情報があります。

10

私はこれで一日中解決策を見つけましたが、それは卑劣ですが動作します。私が受け取ったエラーメッセージには、ライブラリ.zipの間にスペースがあったことに気付きました。私はpy2exeやセレンのソースコードでそれをトレースすることができませんでした。私もライブラリzipにxpiファイルを置こうとしましたが、うまくいきませんでした。回避策です:

  1. セットアップファイルでは、これらのオプションを使用します。

    setup(
        console=['yourFile.py'], 
        options={ 
          "py2exe":{ 
            "skip_archive": True, 
            "unbuffered": True, 
            "optimize": 2 
          } 
        } 
    ) 
    
  2. 実行py2exeは、distディレクトリに

  3. コピーしXPIファイルをインストール

ことそれを行う必要があります。

+1

私はaknatnに同意します、私はこの問題の解決策を以前に見つけましたが、ここで質問を投稿したことを完全に忘れました。主な解決策は、GUI2ExeのようなGUIビルダーを使っても、最終パッケージが圧縮されていないかどうかを確認し、手動で.xpiファイルを追加して動作させることができるフォルダにすべてが解凍されていることを確認することです。後で、NSISのようなものを使用して、ライセンス契約やキーファイルなどのクールなインストールウィザードにパッケージ化して、第三者に配布します。私はPythonがうまく動作するように努力して、多くのことを学んだと言わなければなりません:) –

+0

ありがとう、投票についてどうかしてください;-) – aknatn

+0

LOL私はそれを試しました...投票は15の評判を必要としますxD –

0

私はこれが古いと知っていますが、私はプログラマが手作業で何かをやっていることを避けるために、更新された答えを提供したかったのです。

タプルとしてデータファイルのリストを指定するには、py2exeオプションがあります。(pathtocopyto, [list of files and where to get them])

例:

from disutils.core import setup 
import py2exe 

wd_base = 'C:\\Python27\\Lib\\site-packages\\selenium\\webdriver' 
RequiredDataFailes = [ 
    ('selenium/webdriver/firefox', ['%s\\firefox\\webdriver.xpi'%(wd_base), '%s\\firefox\\webdriver_prefs.json'%(wd_base)]) 
] 

setup(
    console=['MyScript.py'], 
    data_files=RequiredDataFiles, 
    options={ 
     **mypy2exeopts 
    } 
) 

私は現在の認識しています唯一の欠点は、あなたがまだskip_archive = Trueが必要なことです。 library.zipのデータファイルを取得するための回避策がありますが、webdriverの情報にはあまり運がありませんでした。ここで

1

は、あなたの質問のソリューションです:私は同じ問題を持っていたし、私はそれを解決するので は、私は少しコードを変更し、それが仕事である必要があります:

from distutils.core import setup 
import py2exe 

wd_base = 'C:\\Python27\\Lib\site-packages\\selenium-2.44.0-py2.7.egg \\selenium\\webdriver' 
RequiredDataFailes = [ 
('selenium/webdriver/firefox', ['%s\\firefox\\webdriver.xpi'%(wd_base), '%s\\firefox\\webdriver_prefs.json'%(wd_base)]) 
] 

setup(
windows=[{"script":"gui_final.py"}],options={"py2exe":{"skip_archive": True,"includes":["sip"]}}, 
data_files=RequiredDataFailes, 

) 
+0

あなたのスクリプトを試してみると、sipに関するエラーが出る。定義されていないか不明である –

関連する問題