私のアプリのモジュールの1つは、.pydファイルの関数を使用しています。dll(exclude_dlls)を除外するオプションがありますが、それらを含めるためのオプションはありますか?残りのファイル(.py)をコピーしているにもかかわらず、ビルドプロセスがモジュール内の.pydをコピーしていないようです。また、.dllを含める必要があります。py2exeに.pydファイルと.dllファイルの両方を含めるにはどうすればよいですか?
4 に答える
.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"}}
)
セットアップ スクリプトを変更して、ファイルを明示的にコピーできます。
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)
など...もちろん、ニーズに合わせて変更してください。
自動的に検出されない場合は、手動で py2exe の一時ビルド ディレクトリにコピーしてみてください。それらは最終的な実行可能ファイルに含まれます。
おそらく、setup() に data_files オプションを使用できます。
import glob
setup(name='MyApp',
# other options,
data_files=[('.', glob.glob('*.dll')),
('.', glob.glob('*.pyd'))],
)
data_files はタプルのリストである必要があり、各タプルには以下が含まれます。
- ターゲット ディレクトリ。
- コピーするファイルのリスト。
これはファイルをlibrary.zipに入れません。これはdllの問題ではありませんが、pydファイルについては知りません。