Установщик Windows Python со всеми зависимостями?

У меня есть пакет в репозитории PyPI. Я включаю установщик Windows, выполнив следующую команду для загрузки новой версии, в частности "bdist_wininst":

python3 setup.py register sdist bdist_wininst upload

Однако, когда пользователь запускает связанный файл .exe, он не устанавливает сам Python 3. Более того, даже если Python 3 установлен, он не будет устанавливать какие-либо связанные зависимости.

Каков наилучший способ создания установщика Windows, который установит Python 3, если он не установлен, вместе с моим пакетом и его зависимостями?

Если это невозможно, то какой лучший способ создать установщик Windows, который установит мой пакет и его зависимости, если предполагается, что Python 3 установлен?

Я на Ubuntu 12.04. Если это какая-либо помощь, вот мой setup.py:

from distutils.core import setup

import codecs 
try: 
    codecs.lookup('mbcs') 
except LookupError: 
    ascii = codecs.lookup('ascii') 
    func = lambda name, enc=ascii: {True: enc}.get(name=='mbcs') 
    codecs.register(func) 

setup(
    name='SIGACTor',
    version='0.1.14dev',
    description=open('README.txt').read(),
    url='http://bitbucket.org/davidystephenson/sigactor',
    author='David Y. Stephenson',
    author_email='[email protected]',
    packages=['sigactor'],
    license='Proprietary',
    long_description=open('README.txt').read(),
    install_requires=[
        'beautifulsoup4',
        'feedparser',
        'python-dateutil',
        'pyyaml'
    ],
)

Ответ 1

Вы должны определенно попробовать pynsist, который может связывать Python с вашими пакетами и основан на хорошо зарекомендовавшем NSIS-установщике с открытым исходным кодом:

https://pypi.python.org/pypi/pynsist

Команда Anaconda предлагает Constructor, который основан на conda и NSIS снова:

https://github.com/conda/constructor

Наконец, этот подход с использованием WinPython и наиболее стабильного установщика под названием InnoSetup:

http://cyrille.rossant.net/create-a-standalone-windows-installer-for-your-python-application/

Но если ваш пакет не является библиотекой, а приложением, вы можете связать его (заморозить) с помощью Python и всех зависимостей, даже сжать его с помощью pyinstaller:

http://www.pyinstaller.org

Это то, что я использую для всех своих приложений даже с сумасшедшими взаимозависимыми зависимостями!

Бонус - инструмент автоматического обновления для pyinstaller:

https://github.com/JMSwag/PyUpdater