2016-01-23 11 views
7

शामिल हैं, मैं विंडोज़ के लिए प्लेटफार्म विशिष्ट बाइनरी वितरण पैकेज जेनरेट करने की कोशिश कर रहा हूं, लेकिन python setup.py bdist_wheel सार्वभौमिक फ़ाइल नाम उत्पन्न करता है। प्लेटफॉर्म विशिष्ट नामों के साथ पहियों को पाने के लिए मुझे अपने setup.py में बदलने की आवश्यकता है या अन्यथा? जब से मैं setuptools इकट्ठा करता हूं, तब से यह पहचानना चाहिए कि जब पैकेज सार्वभौमिक नहीं होगा, लेकिन यह मेरे लिए काम नहीं कर रहा है।व्हील नाम प्लेटफ़ॉर्म स्वतंत्र हैं, भले ही मेरे पैकेज में संकलित लाइब्रेरी

जिस परियोजना पर मैं काम कर रहा हूं वह सेमीकेक और मिंगव w64 का उपयोग करके पुस्तकालयों के कई रूपों को संकलित करता है। ये संकलित पुस्तकालय निश्चित रूप से 32/64 बिट विशिष्ट हैं। व्यक्तिगत वितरण बनाने के लिए मैं लक्ष्य प्लेटफॉर्म के लिए वर्चुअलनव बनाता हूं जिससे मैं पुस्तकालयों को संकलित करता हूं। संकलित पुस्तकालयों को तब पहिया के लिए पाइथन पैकेज में कॉपी किया जाता है।

यहां मेरा setup.py है। pyfvs_files संकलित, '* .pyd' फ़ाइलों को शामिल करने की एक सूची है। यह 'pyfvs-0.0.1a0-py27-none-any.whl' नामक पहियों का उत्पादन करता है, जहां मैं इसे 'pyfvs-0.0.1a0-py27-none-win32.whl' और 'pyfvs-0.0.1a0-py27' होने की अपेक्षा करता हूं -none-win_amd64.whl '। जब पीपी के माध्यम से स्थापित किया जाता है तो पैकेज प्लेटफ़ॉर्म के लिए अपेक्षाकृत संकुल कार्य करता है, लेकिन निश्चित रूप से वैकल्पिक प्लेटफ़ॉर्म के लिए विफल रहता है। आखिरकार मैं पाइथन 2.7, 3.4, 3.5 दोनों विंडोज़ 32 & 64 बिट और लिनक्स 64 बिट पर समर्थन करना चाहता हूं।

import os 
from glob import glob 

from setuptools import setup 
from setuptools.dist import Distribution 

# TODO: Get the version from the git tag and or revision. 
version = '0.0.1a0' 

if os.name=='nt': 
    so_ext = 'pyd' 
else: 
    so_ext = 'so' 

pyfvs_files = glob('pyfvs/*.{}'.format(so_ext)) 
pyfvs_files.extend(['pyfvs/pyfvs.cfg',]) 

description = open('./README.txt').readline().strip() 
long_desc = open('./README.txt').read().strip() 

class BinaryDistribution(Distribution): 
    def is_pure(self): 
     return False 

setup(
    name='pyfvs' 
    , version=version 
    , description=description 
    , long_description=long_desc 
    , url='' 
    , author="" 
    , author_email="" 
    , packages=['pyfvs',] 
    , include_package_data=True 
    , distclass=BinaryDistribution 
    , data_files = [ 
      ('pyfvs',pyfvs_files) 
      , ('pyfvs/docs',glob('pyfvs/docs/*')) 
      , ('pyfvs/examples',glob('pyfvs/examples/*')) 
      , ('pyfvs/test',glob('pyfvs/test/*')) 
      ] 
    , entry_points={ 
      'console_scripts': [ 
      'fvs=pyfvs.__main__:main' 
      ] 
     } 
    , classifiers=[ 
      'Development Status :: 3 - Alpha' 
      , 'Environment :: Console' 
      , 'Intended Audience :: Developers' 
      , 'Intended Audience :: End Users/Desktop' 
      , 'Intended Audience :: Science/Research' 
      , 'Natural Language :: English' 
      , 'Programming Language :: Python' 
      , 'Programming Language :: Fortran' 
      ] 
    , keywords='' 
    ) 

उत्तर

2

मैं कोई समाधान मिल गया है, लेकिन सुझाव के रूप में here एक समाधान, सेटअप, एक छोटे से डमी पुस्तकालय पर्याप्त होगा में एक सी विस्तार शामिल करने के लिए किया गया था। Setuptools तब जानता है कि बाइनरी वितरण अब प्लेटफ़ॉर्म स्वतंत्र नहीं हैं और परिणामस्वरूप पहियों इत्यादि उचित रूप से नामित हैं। मेरा समाधान आगे बढ़ना था और मेरे रैपर वर्गों के साथ एकीकृत करने के लिए कुछ उपयोगी कार्यों को प्रदान करने के लिए एक साइथन एक्सटेंशन लिखना था।

संभावित रूप से वितरण और is_pure=false को सेट करना एक ही चीज़ को पूरा करता है, लेकिन ऐसा नहीं होता है। मैंने आगे की जांच नहीं की है।

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