Пакет приложения python, как это делает spyder
У меня есть программное обеспечение python с открытым исходным кодом ( GridCal), которое имеет графический интерфейс, выполненный с PyQt5. Программа является pip-устанавливаемой pip3 install GridCal
.
Я хотел бы знать, , что я должна сделать так, чтобы, Когда кто-Пип-устанавливает мою программу, , он появляется в системе меню например, когда один устанавливает Спайдер (в интегрированную среду разработки Python)
Пока все, что я могу предоставить, - этоsetup.py
моей программы, но я не знаю, имеет ли она отношение к делу.
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 ответ:
Вы можете узнать, как spyder-ide реализовал эту функциональность в своих приложениях. setup.py скрипт в строке 77, вот код:
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
Затем он вызывается в обычной
data_files
установке экземпляраsetup()
.Что он делает, так это дает установщику команду скопировать необходимые файлы, чтобы сделать пункт меню в соответствующих папках.[0]
В системах linux вам нужно создать файл
appName.desktop
, эти файлы обычно находятся в/usr/share/applications
или/usr/local/share/applications
для установленных приложений общесистемные, или~/.local/share/applications
для пользовательских приложений[1].Структура файла выглядит следующим образом (само собой разумеется, ссылка на дополнительные ключи может быть найдена в ссылке выше):
Вы можете разместить значок приложения в любом месте и использовать его полный путь или просто поместить под[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.
share/pixmaps/
и ссылаться на него только по имени файла.Обратите внимание, что сценарий не использует полные пути при указании местоположения для .рабочий стол и файлы значков, которые будут установлено на, это потому, что местоположения будут относительно текущего
sys.exec_prefix
, который по умолчанию равен/usr/local/
[2]На windows вам нужно создать
.lnk
(двоичный файл) в каталоге~\Windows\Start Menu\Programs
, я не смогу подробно объяснить, как это работает (не программист windows), для этого они написали полный пост-инсталляционный скрипт, который занимается созданием ярлыков меню для windows[3].Небольшое уточнение для пост-установки windows сценарий:
Похоже, что механизм, реализующий его выполнение, был удален из файла spyder-idesetup.py
, поэтому все вы, люди, копающие, чтобы найти, как он работает, вы не сможете узнать, если не проверите историю файлов, поэтому, чтобы очистить путаницу, вот что вы можете сделать, чтобы заставить его выполнить (не путь spyder-ide):
- создайте пользовательскую команду
PostInstallCommand
и поручитеsetup()
выполнить ее, добавив ее к атрибутуcmdclass
, напримерcmdclass={'install': PostInstallCommand}
проверьте этот ответ на подробные инструкцииНе забудьте проверить наличие ОС перед добавлением атрибута
PostInstallCommand
к вашему атрибутуcmdclass
, вы не захотите выполнять его на вашем Linux envs.Надеюсь, это поможет!