2017-01-31 85 views
16

Mam oprogramowanie python open source (GridCal), który ma GUI wykonane z PyQt5. Program można instalować w trybie pip pip3 install GridCal.Pakowanie aplikacji python jak spyder ma

Chciałbym wiedzieć co muszę zrobić tak, że gdy ktoś PIP-instaluje moim programie, pojawi się na menu systemowym jak kiedy ktoś instaluje Spyder (IDE Pythona)

Tak daleko, wszystko, co mogę dostarczyć, to setup.py mojego programu, ale nie wiem, czy jest to istotne.

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" 
         ], 
) 

Odpowiedz

14

Można znaleźć jak spyder-ide wdrożyła tę funkcję w swojej setup.py skryptu w linii 77, oto kod:

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 

to jest wywoływana w regularnych data_files ustawienia z setup() wystąpienie.

Zaleca instalatorowi skopiowanie wymaganych plików w celu utworzenia pozycji menu w odpowiednich folderach. [0]

W systemach Linux trzeba utworzyć plik appName.desktop pliki te zazwyczaj znajdują się w /usr/share/applications lub /usr/local/share/applications do zastosowań w całym systemie, lub ~/.local/share/applications zainstalowanych aplikacji specyficznych dla użytkownika [1].

struktura pliku wygląda następująco (oczywiste odniesienie do kilku klawiszy można znaleźć w linku referencyjnego powyżej):

[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. 

Możesz umieścić ikonę aplikacji w dowolnym miejscu i wykorzystać swoją pełną ścieżkę lub po prostu umieść pod numerem share/pixmaps/ i podaj tylko nazwę pliku.

Zauważ, że skrypt podczas określania lokalizacji dla plików .desktop i ikona montowanych na nie korzysta z pełnej ścieżki, to dlatego, że miejsca będą w stosunku do bieżącego sys.exec_prefix które domyślnie /usr/local/[2]

W oknach trzeba utworzyć .lnk (plik binarny) w katalogu ~\Windows\Start Menu\Programs, nie będę w stanie wyjaśnić szczegółowo, jak to działa (nie programista systemu Windows), ponieważ napisali kompletny skrypt po instalacji, który zajmuje się tworzeniem skróty menu dla okien [3].

Trochę wyjaśnienie dla Windows Script poinstalacyjnej:
Wydaje się, że mechanizm, który implementuje jego realizacja została usunięta z Spyder-ide za setup.py pliku, więc wszystko co ludzie kopanie, aby znaleźć jak to działa, nie będzie w stanie dowiedzieć się, jeśli nie sprawdzić historię pliku, tak aby usunąć niejasności, oto co można zrobić, aby zmusić go do wykonania (nie sposób spyder-IDE):

  • Tworzenie polecenia niestandardowego PostInstallCommand i polecam setup(), aby uruchomić go, dodając go do atrybutu cmdclass, tak jak to cmdclass={'install': PostInstallCommand} sprawdzić this answer for detailed instructions

Nie zapomnij sprawdzić dla systemu operacyjnego, zanim dołączy PostInstallCommand do atrybutu cmdclass, nie będzie chciał go wykonać na swoim envs Linux.

Mam nadzieję, że to pomoże!

+0

W jaki sposób PIP będzie wiedział, że posiadasz tam paczkę? –

+0

Nie rozumiem, co masz na myśli – HassenPy

+0

czy zainstalujesz paczkę w tej sytuacji? –