10

私のアプリのモジュールの1つは、.pydファイルの関数を使用しています。dll(exclude_dlls)を除外するオプションがありますが、それらを含めるためのオプションはありますか?残りのファイル(.py)をコピーしているにもかかわらず、ビルドプロセスがモジュール内の.pydをコピーしていないようです。また、.dllを含める必要があります。py2exeに.pydファイルと.dllファイルの両方を含めるにはどうすればよいですか?

4

4 に答える 4

12

.pyd と .DLL はここで異なります。.pyd は modulefinder によって自動的に検出され、(適切な "import" ステートメントがある限り) 何もしなくても含まれるはずです。1 つが欠けている場合は、.py ファイルが欠けている場合と同じことを行います (どちらも単なるモジュールです): py2exe オプションに「include」オプションを使用します。

Modulefinder は必ずしも .DLL の依存関係を見つけるとは限りません (py2exe はいくつかを検出できます)。

たとえば、2 つの .DLL ('foo.dll' および 'bar.dll') をインクルードし、3 つの .pyd ('module1.pyd'、'module2.pyd'、および 'module3.pyd') をインクルードする場合含む:

setup(name='App',
      # other options,
      data_files=[('.', 'foo.dll'), ('.', 'bar.dll')],
      options = {"py2exe" : {"includes" : "module1,module2,module3"}}
     )
于 2008-10-22T02:27:44.420 に答える
2

セットアップ スクリプトを変更して、ファイルを明示的にコピーできます。

script = "PyInvaders.py"        #name of starting .PY
project_name = os.path.splitext(os.path.split(script)[1])[0]
setup(name=project_name, scripts=[script]) #this installs the program

#also need to hand copy the extra files here
def installfile(name):
    dst = os.path.join('dist', project_name)
    print 'copying', name, '->', dst
    if os.path.isdir(name):
    dst = os.path.join(dst, name)
    if os.path.isdir(dst):
        shutil.rmtree(dst)
    shutil.copytree(name, dst)
    elif os.path.isfile(name):
    shutil.copy(name, dst)
    else:
    print 'Warning, %s not found' % name

pygamedir = os.path.split(pygame.base.__file__)[0]
installfile(os.path.join(pygamedir, pygame.font.get_default_font()))
installfile(os.path.join(pygamedir, 'pygame_icon.bmp'))
for data in extra_data:
    installfile(data)

など...もちろん、ニーズに合わせて変更してください。

于 2008-10-21T05:51:12.263 に答える
2

自動的に検出されない場合は、手動で py2exe の一時ビルド ディレクトリにコピーしてみてください。それらは最終的な実行可能ファイルに含まれます。

于 2008-10-21T05:08:35.530 に答える
2

おそらく、setup() に data_files オプションを使用できます。

import glob
setup(name='MyApp',
      # other options,
      data_files=[('.', glob.glob('*.dll')),
                  ('.', glob.glob('*.pyd'))],
     )

data_files はタプルのリストである必要があり、各タプルには以下が含まれます。

  1. ターゲット ディレクトリ。
  2. コピーするファイルのリスト。

これはファイルをlibrary.zipに入れません。これはdllの問題ではありませんが、pydファイルについては知りません。

于 2008-10-22T01:22:00.200 に答える