2

だから今、私は実行可能ファイル(できれば単一のファイル)に変換したいpythonプログラムを持っています。現在、ターゲット システムは RedHat (および CentOS) と Debian (および Ubuntu) のみです。

まず、PyInstaller を試してみましたが、実行すると、.specファイルと、build と dist という 2 つのフォルダーが作成されます。そこから先に進む方法がわかりません。

次に、Python に同梱されている freeze.py を試しました。使用法は次のように理解しています。

python /path/to/freeze.py  /path/to/myfile.py

これはエラー***Test Failed*** 2 failuresをスローし、NameError: name 'testdata' is not defined

完全なエラーは次のとおりです。

**********************************************************************
File "/usr/lib/python2.6/site-packages/freeze.py", line 117, in __main__.freeze
Failed example:
    testdata = json.loads(
        gzip.open("testdata.json.gz", "r").read().decode()
    )
Exception raised:
    Traceback (most recent call last):
      File "/usr/lib64/python2.6/doctest.py", line 1253, in __run
        compileflags, 1) in test.globs
      File "<doctest __main__.freeze[3]>", line 2, in <module>
        gzip.open("testdata.json.gz", "r").read().decode()
      File "/usr/lib64/python2.6/gzip.py", line 33, in open
        return GzipFile(filename, mode, compresslevel)
      File "/usr/lib64/python2.6/gzip.py", line 79, in __init__
        fileobj = self.myfileobj = __builtin__.open(filename, mode or 'rb')
    IOError: [Errno 2] No such file or directory: 'testdata.json.gz'
**********************************************************************
File "/usr/lib/python2.6/site-packages/freeze.py", line 121, in __main__.freeze
Failed example:
    freeze(testdata) == freeze_fast(testdata)
Exception raised:
    Traceback (most recent call last):
      File "/usr/lib64/python2.6/doctest.py", line 1253, in __run
        compileflags, 1) in test.globs
      File "<doctest __main__.freeze[4]>", line 1, in <module>
        freeze(testdata) == freeze_fast(testdata)
    NameError: name 'testdata' is not defined
**********************************************************************
1 items had failures:
   2 of   8 in __main__.freeze
***Test Failed*** 2 failures.

2つ(または同じ結果を達成するのに役立つ他のツール)のいずれかを使用するための助けが必要です。

ありがとう。

4

4 に答える 4

2

Nuitkaを調査することをお勧めします。Python ソース コードを受け取り、それを C++ API 呼び出しに変換します。次に、実行可能なバイナリ (Linux では ELF) にコンパイルされます。数年前から存在しており、幅広い Python バージョンをサポートしています。

使用すると、おそらくパフォーマンスの向上も得られます。おすすめされた。

于 2013-08-09T09:14:38.833 に答える
2

実行可能にしたい場合は、chmod +x /path/to/script.py. これにより、ファイルを実行する権限が誰にでも与えられます。その後、できますpython /path/to/script.py

まだ python でコマンドを開始する必要がありますが、これは醜いです。この行#!/usr/bin/env pythonをスクリプトの最初の行に追加するとします。これは、シバンまたはハッシュバンと呼ばれます。その後 (chmod することを忘れないでください)、/path/to/script.py実行できます。

スクリプトのディレクトリにすでにいる場合は、./script.py. (まだそれをchmodすることを忘れないでください)

それでも満足できず、スクリプトの名前だけを入力したい場合は、スクリプトをパス上のフォルダーの 1 つに移動します (これは、シェルで入力して見つけることができますecho $PATH。通常、これは /usr/ です)。 /bin/、/usr/local/bin など)。スクリプトをこれらのフォルダーのいずれかに移動すると、script.py. これを行う場合は、.py 拡張子を削除することをお勧めします。そうすれば、.py と入力するだけで済みscriptます。これにより、少なくともその呼び出しでは、他の UNIX シェル コマンド (ls、grep、cat) のように見えます。

于 2013-08-09T08:29:24.477 に答える
2

-Fフラグを使用するpyinstaller.pyと、単一の実行可能ファイルが作成され、dist/ディレクトリにドロップされます。

pyinstaller.py --helpオプションの長いリストを表示します。

pyinstaller-X.X/docディレクトリには、HTML および PDF の完全なマニュアルがあります。

于 2013-09-17T02:46:05.940 に答える