Empaqueter une application python comme spyder le fait

j'ai un logiciel python open source ( GridCal) qui a une interface graphique avec PyQt5. Le programme pep-installable pip3 install GridCal.

je voudrais savoir que dois-je faire pour que quand quelqu'un pip-installe mon programme il apparaît sur les menus du système comme quand on installe Spyder (Le python IDE)

Jusqu'à présent, tout ce que je peux fournir est le setup.py de mon programme, mais je ne sais pas si c'est pertinent.

from distutils.core import setup
import sys
import os

name = "GridCal"

# Python 2.4 or later needed
if sys.version_info < (3, 5, 0, 'final', 0):
    raise (SystemExit, 'Python 3.5 or later is required!')

# Build a list of all project modules
packages = []
for dirname, dirnames, filenames in os.walk(name):
        if '__init__.py' in filenames:
            packages.append(dirname.replace('/', '.'))

package_dir = {name: name}

# Data_files (e.g. doc) needs (directory, files-in-this-directory) tuples
data_files = []
for dirname, dirnames, filenames in os.walk('doc'):
        fileslist = []
        for filename in filenames:
            fullname = os.path.join(dirname, filename)
            fileslist.append(fullname)
        data_files.append(('share/' + name + '/' + dirname, fileslist))

setup(
    # Application name:
    name=name,

    # Version number (initial):
    version="1.025",

    # Application author details:
    author="Santiago Peñate Vera",
    author_email="santiago.penate.vera@gmail.com",

    # Packages
    packages=packages,

    data_files=data_files,

    # Include additional files into the package
    include_package_data=True,

    # Details
    url="http://pypi.python.org/pypi/GridCal/",

    # License file
    license="LICENSE.txt",

    # description
    description="Research Oriented electrical simulation software.",

    # long_description=open("README.txt").read(),

    # Dependent packages (distributions)
    install_requires=["numpy",
                      "scipy",
                      "networkx",
                      "pandas",
                      "xlwt",
                      "xlrd",
                      "PyQt5",
                      "matplotlib",
                      "qtconsole"
                      ],
)
16
demandé sur Bellerofont 2017-01-31 17:30:49

1 réponses

Vous pouvez trouver comment spyder-ide a mis en place cette fonctionnalité dans leur setup.py script à la ligne 77, voici le code:

def get_data_files():
    """Return data_files in a platform dependent manner"""
    if sys.platform.startswith('linux'):
        if PY3:
            data_files = [('share/applications', ['scripts/spyder3.desktop']),
                      ('share/pixmaps', ['img_src/spyder3.png'])]
        else:
            data_files = [('share/applications', ['scripts/spyder.desktop']),
                      ('share/pixmaps', ['img_src/spyder.png'])]
    elif os.name == 'nt':
        data_files = [('scripts', ['img_src/spyder.ico',
                               'img_src/spyder_reset.ico'])]
    else:
        data_files = []
    return data_files

puis il est appelé dans le normal data_filessetup() instance.

ce qu'il fait est de demander à l'installateur de copier les fichiers requis pour créer un élément de menu dans leurs dossiers respectifs. [0]

Dans les systèmes linux, vous devez créer un appName.desktop Fichier, ces fichiers résident habituellement dans /usr/share/applications ou /usr/local/share/applications pour les applications installées à l'échelle du système, ou ~/.local/share/applications pour l'utilisateur des applications spécifiques [1].

La structure du fichier ressemble à ceci (explicite, une référence à plus de clés peut être trouvée dans le lien de référence ci-dessus):

[Desktop Entry]
Version=1.0
Terminal=false
Type=Application
Name=AppName
Exec=/path/to/executable
Icon=/path/to/icon
Categories=Graphics;2DGraphics;Development;
Comment=Tooltip comment appears when you hover on menu icon.

vous pouvez choisir de placer votre icône d'application n'importe où et utiliser son chemin complet, ou tout simplement placer sous share/pixmaps/ et le référencer juste par son nom de fichier.

notez que le script n'utilise pas pleinement chemins lors de la spécification des emplacements pour le .les fichiers de bureau et d'icônes à installer, c'est parce que les emplacements seront relatifs à l'actuel sys.exec_prefix par défaut /usr/local/ [2]

Sur windows, vous devez créer un .lnk (fichier binaire) dans le ~\Windows\Start Menu\Programs répertoire, Je ne serai pas en mesure d'expliquer en détail comment il fonctionne (pas un programmeur windows), pour ce qu'ils ont écrit un script complet de post-installation qui traite de faire des raccourcis de menu pour windows [3].

un petit éclaircissement pour le script de post-installation de windows:

Il semble que le mécanisme qui implémente son exécution ait été retiré de spyder-ide setup.py fichier, donc tous les gens qui creusent pour trouver comment ça marche, vous ne pourrez pas le savoir à moins de vérifier l'historique du fichier, donc pour effacer la confusion, voici ce que vous pouvez faire pour le faire exécuter (pas la manière spyder-ide):

n'oubliez pas de vérifier L'OS avant d'ajouter le PostInstallCommand pour votre cmdclass attribut, vous ne voudrez pas l'exécuter sur votre Linux envs.

J'espère que cela vous aidera!

14
répondu HassenPy 2017-05-23 12:33:42