Пакет приложения 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 16

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-ide setup.py, поэтому все вы, люди, копающие, чтобы найти, как он работает, вы не сможете узнать, если не проверите историю файлов, поэтому, чтобы очистить путаницу, вот что вы можете сделать, чтобы заставить его выполнить (не путь spyder-ide):

  • создайте пользовательскую команду PostInstallCommand и поручите setup() выполнить ее, добавив ее к атрибуту cmdclass, например cmdclass={'install': PostInstallCommand} проверьте этот ответ на подробные инструкции

Не забудьте проверить наличие ОС перед добавлением атрибута PostInstallCommand к вашему атрибуту cmdclass, вы не захотите выполнять его на вашем Linux envs.

Надеюсь, это поможет!