2013-06-24 2 views
0

Я пытаюсь включить распределение источников в программу, которую я пишу.Distutils - Распространяйте исходный код + модули (модули)

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

Вот мой setup.py сценарий:

from distutils.core import setup 

setup_options = { 
'name': 'somename', 'version': '1.11', 
'author': 'developer', 'author_email': 'email', 'py_modules': ['mymodule'], 
} 

setup(**setup_options) 

Однако, с помощью командной строки для запуска python setup.py bdist только создает папку с mymodule.py.

Кроме того, еще один сценарий, у меня есть (создать автономный EXE-файл) не включает в себя файлы данных:

import sys 
from cx_Freeze import setup, Executable 

base = None 
if sys.platform == "win32": 
    base = "Win32GUI" 

setup(name = "somename", 
    version = "1.11", 
    description = "some description", 
    executables = [Executable("mymodule.py", base=base)], 
    data_files = ['helpData.pkl', 'General Public License - 3.0.pdf']) 

(я уверен, выполнение его с помощью python setup.py bdist --format=msi).

Как включить все модули для моего первого сценария установки и включить файлы данных для моего второго скрипта? Благодаря!

ответ

1

У вас есть два отдельных вопроса.


Как я могу включить все модули для моей первой установки скрипта

distutils не может сделать это, и не предназначен для. Вот почему такие вещи, как cx_Freeze, zc.buildout и т. Д. Есть на первом месте.

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

Если вы хотите, чтобы Python собирал их для вас, вам нужно сделать дополнительную работу. Самое простое решение - использовать код искателя зависимостей от cx_Freeze или py2exe или что вы предпочитаете. (Некоторые из них имеют «полу-автономный» флаг, который пропускает через STDLIB модулей, другие требуют, чтобы отфильтровать его.)


... и включают в себя файлы данных для моего второго сценария?

Вы сбиваете с толку, пытаясь объединить шаг замораживания и шаг установки установки в один.

Во-первых, вам необходимо передать файлы данных на этап замораживания, чтобы скопировать их на соответствующие относительные пути вместе с .exe, как описано в cx_freeze FAQ.

Затем вы можете предоставить команду bdist-msi для упаковки пакетов.

Для этого вам необходимо указать правильные пути в package_data или data_files. Список простых имен файлов в data_files, вероятно, сделает неправильную вещь, а также даст вам предупреждение. Вы не должны это делать, и вместо того, чтобы пытаться понять, почему это ломается по-другому, чем вы надеялись на то, что он сломается, лучше поступать правильно. См. the distutils docs для соответствующих разделов.


В то же время, когда distutils не делать то, что вы ожидаете, и вы не знаете, почему, вы должны запустить его с помощью флага отладки. Даже если он не скажет ответ, он по крайней мере даст вам больше информации, которую вы можете отправить в такие места, как SO, чтобы он мог сказать кому-то ответ (и они могут вам рассказать). Просто установите DISTUTILS_DEBUG в строку "True" в вашей среде, а затем запустите свою настройку еще раз.