2017-01-31 34 views
16

Tôi có một phần mềm python mã nguồn mở (GridCal) có giao diện đồ họa được tạo bằng PyQt5. Chương trình có thể cài đặt pip pip3 install GridCal.Đóng gói ứng dụng python như spyder hiện

Tôi muốn biết những gì tôi phải làm như vậy mà khi ai đó pip-cài đặt chương trình của tôi, nó xuất hiện trên hệ thống menu giống như khi một cài đặt Spyder (The python IDE)

Vì vậy, đến nay, tất cả những gì tôi có thể cung cấp là setup.py của chương trình, nhưng tôi không biết liệu nó có liên quan hay không.

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

Trả lời

14

Bạn có thể tìm cách spyder-ide đã thực hiện chức năng này trong kịch bản setup.py của họ tại dòng 77, đây là các mã:

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 

sau đó nó được gọi trong data_files thiết lập thường xuyên của setup() ví dụ.

Điều nó làm là hướng dẫn trình cài đặt sao chép các tệp được yêu cầu để tạo một mục menu trong các thư mục tương ứng. [0]

Trong các hệ thống Linux, bạn cần phải tạo một file appName.desktop, những tập tin này thường cư trú tại /usr/share/applications hoặc /usr/local/share/applications cho các ứng dụng trên toàn hệ thống, hoặc ~/.local/share/applications cài đặt cho các ứng dụng sử dụng cụ thể [1].

cấu trúc tập tin trông như thế này (tự giải thích, một tham chiếu đến nhiều phím có thể được tìm thấy trong các liên kết tham khảo ở trên):

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

Bạn có thể chọn để đặt biểu tượng ứng dụng của bạn bất cứ nơi nào và sử dụng đường dẫn đầy đủ của nó hoặc chỉ cần đặt dưới share/pixmaps/ và tham chiếu nó chỉ bằng tên tệp của nó.

ý rằng kịch bản không sử dụng đường dẫn đầy đủ khi xác định địa điểm cho các file .desktop và biểu tượng để được cài đặt tại, điều này là do các địa điểm sẽ tương đối so với hiện tại sys.exec_prefix mặc định là /usr/local/[2]

Trên cửa sổ bạn cần tạo một tập tin nhị phân .lnk trong thư mục ~\Windows\Start Menu\Programs, tôi sẽ không thể giải thích chi tiết cách hoạt động (không phải là lập trình viên cửa sổ), vì chúng viết kịch bản hoàn chỉnh sau khi cài đặt phím tắt menu cho các cửa sổ [3].

Một làm rõ chút cho kịch bản windows sau khi cài đặt:
Nó có vẻ như cơ chế mà thực hiện thực hiện của nó đã bị xóa khỏi tập tin setup.py spyder-ide, vì vậy tất cả các bạn những người đào bới để tìm cách thức hoạt động, bạn sẽ không thể tìm ra trừ khi bạn kiểm tra lịch sử tệp, do đó, để xóa sự nhầm lẫn, dưới đây là những gì bạn có thể thực hiện để thực hiện (không phải cách gián điệp-ide):

  • Tạo lệnh tùy chỉnh PostInstallCommand và hướng dẫn setup() để chạy nó bằng cách thêm nó vào thuộc tính cmdclass như vậy cmdclass={'install': PostInstallCommand} kiểm tra this answer for detailed instructions

Đừng quên kiểm tra các hệ điều hành trước khi bạn nối thêm các PostInstallCommand đến thuộc tính cmdclass của bạn, bạn sẽ không muốn thực hiện nó trên envs linux của bạn.

Hy vọng điều này sẽ hữu ích!

+0

Pip sẽ biết bạn có gói lyting ở đó như thế nào? –

+0

Tôi không hiểu ý bạn là gì – HassenPy

+0

sẽ cài đặt công việc mypackage trong trường hợp này? –

Các vấn đề liên quan