6

Pythonコードからexeを作成しようとしています。次のように、コマンドラインからコードを問題なく実行できます。

python myScript.py

ここから py2exe をインストールしました: http://sourceforge.net/projects/py2exe/files/py2exe/0.6.9/

そして、次のような setup.py を用意します。

from distutils.core import setup
import py2exe

setup(console=['myScript.py'])

そして、次のように setup.py を実行します。

python setup.py py2exe

出力に次のように表示されます。

The following modules appear to be missing
['Carbon', 'Carbon.Files', '__pypy__', '_scproxy', 'http_parser.http', 'http_parser.reader', 'jinja2._debugsupport', 'jinja2._markupsafe._speedups',
'jinja2.debugrenderer', 'markupsafe', 'pretty', 'socketpool', 'socketpool.util']

そして、案の定、exe を実行しようとすると、エラーが発生します。

$ ./myScript.exe
Traceback (most recent call last):
  File "restkit\__init__.pyc", line 9, in <module>
  File "restkit\conn.pyc", line 14, in <module>
ImportError: No module named socketpool
Traceback (most recent call last):
  File "myScript.py", line 12, in <module>
ImportError: cannot import name Resource

依存関係を見つけるためにpy2exeを取得するにはどうすればよいですか?

ありがとう

4

2 に答える 2

1

Carbonは、2 つの異なる Mac 固有のものの名前です。

まず、2.x では、Mac OS X と Mac Classic の両方のビルドで、標準ライブラリにCarbonパッケージがあり、Carbon/Toolbox API (および OS X では CoreFoundation など) を呼び出すために使用されます。

次に、Mac OS X の 2.x と 3.x の両方で、PyObjC を使用すると、PyObjC ラッパーのCarbon.Framework名前はCarbon. (PyObjC は stdlib の一部ではありませんが、Python の Apple ビルド、および python.org の公式インストーラー以外のほとんどのサードパーティ ビルドに付属しています。)

これらはどちらも Windows には存在しません。

py2exe賢く、プラットフォームに関連するものだけをインポートしようとします。ただし、だますのは非常に簡単です。たとえば、次のようなものです。

try:
    import Carbon.Files
except:
    Carbon = collections.namedtuple('Carbon', 'Files')
    Carbon.Files = None

if Carbon.Files:
    Carbon.Files.whatever(…)

…が必要py2exeと思わせるかもしれませんCarbon.Files

さて、明らかにこれはあなたの問題全体ではありませんが、py2exeモジュール依存コードがプロジェクトで機能していないという非常に大きな危険信号です。おそらく、他のあらゆる種類のモジュールで同様の問題を抱えているため、必要なものが不足していたり​​、持っていないものを要求したりしています。これがおそらく実際の問題の原因です。

FAQで説明されているように、次のように、モジュール ファインダー コードを実行してどこで問題が発生しているかを確認することで、これをデバッグできます。

python -m py2exe.mf -d path/to/my_file.py

この情報を使用して、モジュール ファインダー コードをガイドしたり、混乱しないようにコードを書き直したりできますpy2exe

または、より簡単に言えば、モジュールsetup.pyが誤って検出される理由を気にせずに、回避策としてモジュールを明示的に含めたり除外したりするだけです。

于 2013-03-18T18:44:49.953 に答える
0

py2exe は Python のバージョンに依存します。あなたがしていることはすべて正しいようですが、間違ったバージョンがインストールされていると思います。

于 2013-03-18T15:59:36.727 に答える