2011-02-24 27 views
3

Linux上にabc.pycというコンパイル済みのPython 2.6プログラムがあります。私が走ればpyc拡張子を持たないpythonモジュールを実行する

./abc.pyc 

うまく動作します。しかし、名前をabc(すなわち、pyc拡張子なし)に変更すると、実行に失敗します。

ImportError: No module named abc 

.pyc拡張子を付けずにプログラムを実行するにはどうすればよいですか?

更新日: を私はコンパイル(PYC)バージョンではありませんPYバージョン別

を実行したい、私はCythonを使用してファイルを.soのためにモジュールをコンパイルすることができます知っているが、私は私のメインのPythonプログラムをコンパイルすることができます私はLinuxプラットフォーム上で実行できるものに?もしそうなら、Cythonコマンドラインの例が分かります。

更新済み 私はCythonの質問を別の質問として提起しました。

+1

無用な質問:なぜあなたは拡張機能なしでそれを実行したいですか? –

+0

私は少し難読化を追加したいと思う - それはあまりないが、私はそれが欲しいと思います。 – mozza

+3

@mozza:どのような目的のための難読化?これはあなたを助けるつもりはありません。 Pythonを保護するための既存の議論を見てください:http://stackoverflow.com/q/261638/118160 –

答えて

6

は含まれてい「ABC」という名前のファイルを作成しますか?

.pycファイルはPythonの異なるバージョン間で移植できないことにも注意してください。ソースを再配布することは、ユーザーにとって煩わしさを軽減し、自分のコストを抑えること(それ以外は何もサポートしていない場合)を除けば、本当にその理由から最も良いでしょう。

+0

'-m'を使用している場合、' pyc'拡張モジュール( 'abc'モジュール名のみ)は不要です – ncoghlan

+0

ありがとう、私はそれを修正しました。私は '-m'を使いたい状況を見つけていないので、実際にはそれに慣れていません。 – Duncan

+0

それはクロスプラットフォームではないことを恥ずかしく思います。私は似たようなことをする必要がある... – jambox

1

.pycファイルの名前を変更しないでください。これはインタープリタのショートカットであり、コンパイル済みのコードを再コンパイルする必要はありません。

代わりに、chmod +x ./abcabc.pyファイルの名前を変更し、最初の行の読み取りを確認してください。

#!/usr/bin/python 

あるいは

#!/usr/bin/env python 

問題のあなたの説明から、私は推測.pycファイルには、バイナリとして実行できるようにするためのLinuxの読み込み可能なコードがいくつか含まれています。には新しいバージョンのファイル.pyを入手してください。おそらく、Pythonインタプリタを起動して、それ自身またはソースファイル(いずれか新しい方)をロードしてから、それを続行するだけです。知るか?たぶんosの特定のドキュメントがあなたに伝えます。多分彼らはしません。

+0

私はユーザーにPythonソースを与えたくありません。とにかくこれの周りにはありますか? – mozza

+0

'.pyc'ファイルをデコンパイルすることができます。 – ThiefMaster

+0

私が知りたいのは、ほんの少しの難読化です。 – mozza

1

あなたのコードを難読化するために探している場合は、this discussion on protecting Python codeを参照してください。基本的には、.pycファイルを構成するPythonバイトコードを無駄に配布することはできません。コードが覗き見されないようにする方法はありません。

#!/bin/sh 
/usr/bin/env python -m abc 

するか、彼らはそれを読むことができるならば、あまりにも多くの貴重なソースコードを配っていることである:

関連する問題