2017-01-31 21 views
16

मेरे पास एक ओपन सोर्स पायथन सॉफ्टवेयर (GridCal) है जिसमें पीईक्यूटी 5 के साथ जीयूआई बनाया गया है। कार्यक्रम पीआईपी-स्थापित करने योग्य pip3 install GridCal है।स्पाइडर की तरह एक अजगर ऐप पैकेज करें

मैं जानना चाहता क्या मुझे लगता है कि जब कोई मेरे कार्यक्रम, यह जब एक स्पाइडर स्थापित करता है की तरह सिस्टम मेनू पर दिखाई देता है रंज-स्थापित करता है तो मुझे क्या करना होगा (अजगर आईडीई)

तो चाहते हैं अब तक, मैं अपने कार्यक्रम के 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" 
         ], 
) 

उत्तर

14

आप पा सकते हैं कि कैसे स्पाइडर-आईडीई लाइन 77 पर उनकी setup.py लिपि में इस कार्यक्षमता लागू किया गया है, यहाँ है कोड:

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 फ़ाइल बनाने की आवश्यकता में, ये फाइलें आमतौर पर उपयोगकर्ता के विशिष्ट अनुप्रयोगों [1] के लिए सिस्टम व्यापी, या ~/.local/share/applications स्थापित अनुप्रयोगों के लिए /usr/share/applications या /usr/local/share/applications में रहते हैं।

फ़ाइल संरचना इस तरह दिखता है (स्वतः स्पष्ट है, और अधिक कुंजी के लिए एक संदर्भ उपरोक्त संदर्भ लिंक में पाया जा सकता):

[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/ के तहत रखें और इसे केवल अपने फ़ाइल नाम से संदर्भित करें।

सूचना है कि स्क्रिप्ट पूर्ण पथ का उपयोग नहीं करता जब .desktop और आइकन फ़ाइलों पर स्थापित होने के लिए के लिए स्थानों का उल्लेख करते समय इस वजह से स्थानों वर्तमान sys.exec_prefix के सापेक्ष हो जाएगा जो /usr/local/[2]

को चूक

~\Windows\Start Menu\Programs निर्देशिका में आपको .lnk (बाइनरी फ़ाइल) बनाने की आवश्यकता है, मैं विवरण में यह बताने में सक्षम नहीं हूं कि यह कैसे काम करता है (विंडोज प्रोग्रामर नहीं), क्योंकि उन्होंने एक पूर्ण पोस्ट-इंस्टॉलेशन स्क्रिप्ट लिखी है जो बनाने से संबंधित है विंडोज [3] के लिए मेनू शॉर्टकट्स।

खिड़कियों इंस्टॉल करने के बाद स्क्रिप्ट के लिए एक छोटी सी स्पष्टीकरण:
यह तंत्र कि इसके निष्पादन स्पाइडर-आईडीई के setup.py फ़ाइल से हटा दिया गया लागू करता है की तरह लगता है, ताकि आप सभी लोगों को यह कैसे काम करता खोजने के लिए खुदाई, आप

  • एक कस्टम आदेश बनाएं: जब तक आप फ़ाइल इतिहास की जांच, इसलिए भ्रम की स्थिति स्पष्ट करने के लिए नहीं पता लगाने के लिए सक्षम हो जाएगा, यहाँ आप इसे निष्पादित करने के लिए (नहीं स्पाइडर-आईडीई रास्ता) प्राप्त करने के लिए क्या कर सकते हैं PostInstallCommand और को इसे cmdclass विशेषता में जोड़कर इसे चलाने के लिए cmdclass={'install': PostInstallCommand} जाँच this answer for detailed instructions

भूल इससे पहले कि आप अपने cmdclass विशेषता को PostInstallCommand संलग्न ओएस के लिए जाँच करने के लिए मत करो, आप अपने लिनक्स envs पर अमल करने के लिए चाहते हैं नहीं होंगे।

आशा है कि इससे मदद मिलती है!

+0

पीआईपी कैसे पता चलेगा कि आपके पास एक पैकेज है? –

+0

मुझे यह नहीं मिलता कि आपका क्या मतलब है – HassenPy

+0

इस स्थिति में माइपैकेज काम स्थापित करेगा? –

संबंधित मुद्दे