Включая PYDs/DLLs в сборках py2exe

TensorFlow Serving может быть здесь излишним (так как для этого требуется Docker), но он предоставляет среду вывода через REST API.

10
задан TheObserver 21 October 2008 в 04:40
поделиться

4 ответа

.pyd's и.DLL's отличаются здесь, в котором .pyd должен быть автоматически найден modulefinder и так включенный (как долго, поскольку у Вас есть соответствующий оператор "импорта"), не будучи должен сделать что-либо. Если по Вам скучают, Вы делаете то же самое, как будто .py файл был пропущен (они - оба просто модули): используйте "включать" опцию для py2exe опций.

Modulefinder не обязательно найдет зависимости от.DLLs (py2exe, может обнаружить некоторых), таким образом, Вы, возможно, должны явно включать их с 'data_files' опцией.

Например, где у Вас было два.DLL's ('foo.dll' и 'bar.dll') для включения, и три .pyd's ('module1.pyd', 'module2.pyd', и 'module3.pyd') для включения:

setup(name='App',
      # other options,
      data_files=[('.', 'foo.dll'), ('.', 'bar.dll')],
      options = {"py2exe" : {"includes" : "module1,module2,module3"}}
     )
12
ответ дан 3 December 2019 в 20:45
поделиться

Если они автоматически не обнаруживаются, попытайтесь вручную копировать их во временный каталог сборки py2exe. Они будут включены в заключительный исполняемый файл.

2
ответ дан 3 December 2019 в 20:45
поделиться

Можно изменить сценарий установки для копирования файлов явно:

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)

и т.д.... измените для удовлетворения потребностям, конечно.

2
ответ дан 3 December 2019 в 20:45
поделиться

Возможно, Вы могли использовать data_files опцию установить ():

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

data_files должен быть списком кортежей, где каждый кортеж содержит:

  1. Целевой каталог.
  2. Список файлов для копирования.

Это не поместит файлы в library.zip, который не должен быть проблемой для dlls, но я не знаю о pyd файлах.

2
ответ дан 3 December 2019 в 20:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: