freeze.py
Python 3.3 Windows インストールで Python 3 にバンドルされているはずのユーティリティを探していましたが(インストールさdistribute
れpip
ていますが)、見つかりませんでした。このユーティリティは、Python svn リポジトリから直接ダウンロードできます。ただしfreeze
、標準の Windows Python 3 インストールは付属していますか?
1 に答える
Python の Windows バイナリ インストールにはfreeze
ツールが付属していないようです。そして、どうやらこれには正当な理由があるようです。ソースツリーのfreeze
READMEによると:
Windows 95 または NT では、-p オプションを使用して、Python ソース ツリーの最上位を指定する必要があります。
セクション全体を読むと、次のようになります。Windows では、freeze
Python をソースからビルドし、結果のツリーをフリーズに使用する場合にのみ機能します。freeze
したがって、バイナリ インストールを提供する正当な理由はありません。
ついでに、最初から聞いておけばよかったのですが……そもそも、本当に欲しいんfreeze
ですか?
フリーズ ユーティリティは非常に古くなっています (VC++ 5.0、Windows 95、または NT 4.0 などの要件について説明している README から推測したかもしれません)。また、Windowsでもそれほどうまく機能しませんでした(「... Unixシステムの実行可能ファイルをコンパイルするための」ユーティリティとして説明しているドキュメントからわかるように)。そして、処理できない、または処理が不十分なことがたくさんあります。現時点では、便利なツールというよりもサンプル コードとして考えるべきでしょう。
、、 など、サードパーティの代替手段が多数ありますcx_freeze
。PyPIで「フリーズ」 (および妥当と思われるその他の用語) を検索すると、これらの代替手段が多数見つかります。目的が Python スクリプトからスタンドアロンの実行可能ファイルを作成することである場合 (これはWindows では決して実行できません)、これらのいくつかを試して、最も気に入ったものを選択してください。py2exe
PyInstaller
freeze
目的が異なる場合は、適切なツールも異なりvenv
ます。ユーザーのサイト パッケージ ディレクトリを使用するか、単に圧縮するか、ローカル PyPI サーバーを作成する方がよい場合があります。
コメントでは、次のように述べています。
私が実際に探していたのは、Python コードを C コードに変換するツールです。どうやら、それは不可能です。
それは不可能ではありません、それはfreeze
(またはその後継者/競合他社)が行うことではありません. Cythonは、Python のほぼ厳密なスーパーセットを C コードにコンパイルしますが、Python ランタイム オブジェクトを使用するのは C コードです (変数と関数を C 型で明示的に静的に宣言する場合を除く)。C++ が C の代替として受け入れられる場合、Shed Skinは Python 2.6 の制限されたサブセットをコンパイルします (ネイティブ C++ オブジェクトを使用し、型推論を使用するため、型を静的に宣言する必要はありません)。
問題は、Python コードを C にコンパイルする理由です。
遅いコードの最適化を検討している場合、Cython はボトルネック コードの小さな断片を高速化するのに優れています。少し手間がかかります (何を Cython に移行するか、どの静的型宣言を入れるかなどを決定します) が、努力に対する見返りの曲線はかなり堅実です。Shed Skin は労力を大幅に削減します — それが機能すれば、すべてが自動的に高速化されます — しかし、そもそも慣用的な Python コードをたくさん書くことができないということも意味します。しかし実際には、どちらかを見る前に、JIT コンパイル インタープリターでの Python 2.7.3 (そして願わくば 3.3 も間もなく) の完全な実装であるPyPyを検討する必要があります。または、代わりに、既に最適化されたライブラリを利用するために遅いコードを書き直す必要があるかもしれません (numpy
リストをマッピングするitertools
代わりに、明示的なループのlxml
代わりにhtml.parse
、… の代わりに)。
C コードと直接対話できる Python コードを作成しようとしている場合、面倒なctypes
(または手動で Python バインディングを作成する) 必要がなく、Cython が再びスコアを獲得します。Cython コードは、Python コードと C コードの両方を効果的にネイティブに呼び出すことができ、コンパイラーはそれらすべてを魔法のように機能させます。
読み取り、保守、および改善が可能な C コードを取得しようとしている場合は、運が悪いです。そして、これは実際には不可能かもしれません。慣用的な Python コードは、慣用的な C コードとはまったく異なるため、一方を他方に変換する方法を想像するのは困難です。
根本的な問題が何であるか疑問に思っている場合:
私が知る限り、freeze
物事がどのようにレイアウトされているかについて多くの仮定を立てています。C 拡張モジュールと埋め込みアプリをビルドできる Python インストールがあれば十分ですが、そうではありませんfreeze
。ほぼすべての *nix プラットフォームでfreeze
の標準のバイナリ インストールは、期待どおりに見えますが、Windows での標準のバイナリ インストールはまったく異なります。
Windows シンボリック リンクを使用して (少なくとも Vista 以降と最新バージョンの NTFS を搭載したドライブを使用している場合) 物事をハッキングして、freeze
期待どおりにすべてを整理することは不可能ではありません (誰かが 2.7.1 でそれを行ったブログを見つけました… )、しかし実際には、試す価値はないと思います。これには多くの作業が必要であり (特に、このようなことを学んでいるだけの場合)、すぐに別の問題に遭遇しないという保証はありません。
※これは事実ではありません。Mac では、Apple のプレインストールされた Python と python.org のバイナリ インストーラーの両方が、実際には Mac フレームワークとして編成されたファイルを提供しますが、従来のレイアウトをシミュレートするシンボリック リンクの束を提供します。これで十分です。ほとんどの Linux ディストリビューションやその他の多くのプラットフォームでは、バイナリの python パッケージには開発ファイルがまったく含まれていません。レイアウト。dpkg の依存関係やフレームワークのビルドについて知りたい場合は、Windows を使用していないのではないでしょうか。