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"
],
)
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_files
setup()
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):
- Créer une commande personnalisée
PostInstallCommand
et instruiresetup()
exécuter en ajoutant à l'cmdclass
l'attribut commecmdclass={'install': PostInstallCommand}
case cette réponse pour obtenir des instructions détaillées
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!