2011-02-04 3 views
8

Pythonプログラムを作成し、それをリモートコンピュータに送信し、Pythonがインストールされているコンピュータを使わずにそこで実行できますか? Pythonが解釈される必要があるので、あなたはできないと聞いてきました。これが本当であれば、誰もがPythonをインストールすることを決定しない限り、あなたのプログラムを配布することは難しいので、非常に奇妙に思えます。PythonプログラムをPythonなしのコンピュータで実行できますか? C/C++はどうですか?

また、CとC++についてはどうですか?言語をインストールせずにリモートコンピュータで実行できますか? (コンパイルされた言語なので、できると思います)。

私は確信していませんし、明確にしたいと思います。

EDIT:

私はこの上でいくつかの混合答えを取得し、どこへ行くかわかりませんよ。私はプログラムにPythonライブラリを含めることができ、私はpy2exeを使うことができます。

しかし、私はCとC++で混乱しています。プログラムに図書館を含める必要がありますか?特定のマシンでのみ実行できますか?コンパイラは、すべてのマシン上で実行することを許可していますか?

+0

はい、プログラムの一部としてpythonをバンドルすることができます:http://wiki.python。org/moin/Freeze – Anycorn

+1

現代のプラットフォームでは、依存関係(Pythonインタープリタなど)を自動的にインストールするパッケージマネージャがあります。 –

+0

私は、VMなしでWORAがいかに不可能であるかの簡潔な説明を見たいと思います。 – whatnick

答えて

9

は、WindowsとMac用のpy2exeとpy2appを見てください。しかし、OSXを走らせているMacと最新のLinucesにはPythonがインストールされています。

C/C++アプリケーションは、通常、1つのマシン/ OSアーキテクチャ(32ビットWindows、または64ビットOSX)で動作する実行可能ファイルにコンパイルされます。そのような実行可能ファイルは、すべてではなく一部のマシンで実行できます。たとえば、64ビットのWindowsまたはOSXでは、それぞれのOSの32ビットまたは64ビットのフレーバ用に作成されたプログラムを実行できます。

+0

さて、py2exeを使ってPythonを配布することができます。 CとC++はどうですか?私は混合回答を得ています。どのコンピュータにもどのように配布するのですか? – Justin

+3

@ジャスティン:「どのコンピュータでも実行」は起こっていません。すべてのプロセッサが同じ命令セットを使用するわけではありません。たいていのプロセッサフ​​ァミリは特別な翻訳ランタイムサポートファイルを必要とせずにプログラムを実行することができます。また、何か有用なことをするためには、OS固有のコードも必要です。複数のシステムで実行する場合は、常にシステム固有のランタイムヘルパーが必要です。 –

1

py2exeは、通常のPythonパッケージをインストールしていない別のコンピュータで実行される実行可能ファイルを生成することができます。

はい、CとC++は(少なくとも通常は)スタンドアロンの実行可能ファイルを生成できるコンパイラとして実装されています。

編集:典型的な場合、CまたはC++の実装では、プログラムで使用されている標準ライブラリの関数を実行可能ファイルにリンクします。これは、直接使用されていないが、通常は標準ライブラリ全体を(近くに)含んでいないかなりのビットを含むことができます。

ほとんどの場合、ターゲットライブラリにすでに存在している標準ライブラリの実装に依存する実行可能ファイルを、共有ライブラリ、DLLなどの形式で作成することもできます(OSによって異なる名前が使用されます)。これにより、実行可能ファイルのサイズは小さくなりますが、配布に伴う頭痛が増えます。私は自分のマシンでコンパイルしているコードに使用しますが、実行ファイルを他の人に配布している場合には、一般的には避けてください。現在のハードドライブの価格を考えると、ディスク容量の節約は頭痛になることはめったにありません。

+0

「スタンドアロン」という弱い定義の場合、「特定のOSとすでにコンピュータに存在する共有ライブラリのセットにのみ依存する」ことを意味します。そして、これはコンピュータプログラミングにおけるスタンドアローンの*普遍的な定義です。文字通りの英語の意味とは異なることを強調したいと思います。 –

+0

@Ben Voigt:もしあなたがそれについて踏みにじるなら、私はまだ同意しなければならないでしょう(原文も間違っていますが)。コンパイラはオブジェクトファイルのみを生成します。ほとんどの場合、OS(など)に依存する出力を生成するように設定されていますが、(少なくともいくつかの場合は)本当にスタンドアロンの結果を生成することも可能ですブートコードとして)。彼の質問から、彼はWindowsをターゲットにしています... –

+0

おそらくあなたは質問に何がWindows(対Mac OSXまたはiPad)と言うかについて私に教えてくれるでしょうか?ユーザー特有のOS特有の概念を持っているのはLinuxではないと私は同意します。そして、はい、あなたはコンパイラ対ツールチェーンのポイントを持っています。 –

2

あなたがで任意の言語をプログラムを書かれているし、そのプログラムがマシンコードにコンパイルされていない、それが実行される前に、ユーザーのコンピュータ何かマシンコードに変換する必要があります。

JavaScriptの場合、その「何か」は、しばしばウェブブラウザです。それをコンパイルすることは可能ですが、Pythonの場合には、それは、多くの場合、スタンドアロンのインタプリタです:

Is it feasible to compile Python to machine code?

しかし、明確にする:あなたのプログラムはコードがを行いimachineするようにコンパイルされていないという理由だけでではないと解釈されます。 C#で書かれたプログラムは通常、プログラムが初めて実行されたときにマシンコードにコンパイルされたMSILにコンパイルされます。 Javaプログラムは、最初に実行されるときにもコンパイルされます。

9

pythonは解釈されるので、pythonなしでは実行されません。しかし、それはpythonがインストールされなければならないということを意味するわけではありません。プログラムディレクトリにコピーを含めることも、プログラムとPythonランタイムを1つのファイルにバンドルすることもできます。

CおよびC++ コンパイラ ツールチェーンはマシンコードを生成します(ほとんどの場合、CおよびC++ - > pコードおよびバイトコードコンパイラと同様にCインタプリタも存在します)。しかし、ほとんどのCおよびC++プログラムは共有ライブラリを使用し、共有ライブラリが存在しない限り(実行することはありません(インストールする必要はなく、プログラムディレクトリに置くこともできます)。メインプログラムファイルにすべての必要なライブラリを含めるためのビルドオプション(静的リンク)もあります。

しかし結果は、OSとCPUアーキテクチャの特定の組み合わせに制限されています。複数のプラットフォームでプログラムを実行させるには、常にプラットフォーム固有のランタイムサポートが必要です。

2

実行するリモートマシンにコードを送信するという実用的なアプリケーションを提供します。これは通常、SETI @ Homeなどの宝石を生産したコミュニティGRIDコンピューティングイニシアチブのBOINCプロジェクトで行われます。アプリケーションは通常、x86-linux、AMD64-linux、win32、win64、およびMac OS Universal Binaries(ppc、x86および64ビット)用のマルチプラットフォームバイナリでコンパイルされたC++バージョンです。これは流通のための多様性がありますが、最新のmakeシステムではすべてを簡単に自動化できます(CMakeなど)。

多くの人が、WORAメソッド(どこでも実行して書く)を好み、JavaやPythonなどのVMベースの言語に固執します。この場合、boincプロジェクトはVMのバージョンとそれを実行するコードを配布します。 Java VMはライセンス問題に悩まされているので、Python VMははるかに良いです。 BoincはさまざまなBOINCクライアントでPython VMをembedにしようとしており、PythonベースのGRIDアプリケーションの配布を容易にしています。

これは、アプリケーションの配布に関するアイデアを提供し、情報に基づいた決定を下すのに役立ちます。

0

pythonの統合が不要なスタンドアロンの実行可能ファイルをPyinstallerで調べます。重要な図書館とは別に、走ることができます!

これは最近更新され、よく管理されており、複雑になる可能性もありますが、cythonの統合もサポートしています。ファイルを小さく圧縮することも、実行可能ファイルが複数ある場合は、ファイルを1つのファイルにリンクしてサイズを縮小することもできます。

もちろん、pythonがインストールされた単一の実行ファイルを作成することもできます。あなたのプログラムのサイズが非常に小さいことを保証するために、anacondaを使用しないでください(デフォルトのpython 3.6を使用してください)。

これが役に立ちます。