Пакет приложения python, такого как spyder

У меня есть программное обеспечение python с открытым исходным кодом (GridCal), у которого есть GUI, созданный с помощью PyQt5. Программа может устанавливаться в p pip3 install GridCal.

Я хотел бы знать , что мне нужно сделать, чтобы, когда кто-то устанавливает установку моей программы, появляется в системных меню, например, при установке Spyder ( Python IDE)

До сих пор все, что я могу предоставить, это 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="[email protected]",

    # 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 script в строке 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/ и ссылаться на него только по имени файла.

Обратите внимание, что script не использует полные пути при указании местоположений для файлов .desktop и значков, которые должны быть установлены, потому что местоположения будут относиться к текущему sys.exec_prefix, который по умолчанию равен /usr/local/ [2]

В окнах вам нужно создать .lnk (двоичный файл) в каталоге ~\Windows\Start Menu\Programs, я не буду подробно объяснять, как это работает (а не программист Windows), поскольку они написали полный пост- установка script, которая касается создания ярлыков меню для окон [3].

Небольшое пояснение для окон после установки script:
Похоже, что механизм, который реализует его выполнение, был удален из файла spyder-ide setup.py, поэтому все, кого вы копаете, чтобы найти, как он работает, вы не сможете узнать, если вы не проверите историю файлов, поэтому очистите путаницу, вот что вы можете сделать, чтобы заставить ее выполнить (а не путь spyder-ide):

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

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