2015-01-27 2 views
1

.pyx와 그와 동등한 .cpp를 포함하는 모듈이 있습니다.setup.py를 사용하여 .pyx를 .so로 컴파일

python setup.py develop을 실행하면 .cpp 개의 파일 만 .so으로 변환됩니다. 그러나 파일을 변경하려면 .pyx 파일 만 읽을 수 있으므로이 파일을 .so으로 변환하고 싶습니다. 이 모듈은 크기가 커서 .pyx 파일을 개별적으로 컴파일하면 열이 올 수 있습니다.

python setup.py develop.pyx 파일을 .so으로 직접 변환하는 것이 가장 좋습니다.

이되는 설치 파일입니다,

#! /usr/bin/env python 
# 
# Copyright (C) 2012 Mathieu Blondel 

import sys 
import os 

DISTNAME = 'lightning' 
DESCRIPTION = "Large-scale sparse linear classification, " + \ 
       "regression and ranking in Python" 
LONG_DESCRIPTION = open('README.rst').read() 
MAINTAINER = 'Mathieu Blondel' 
MAINTAINER_EMAIL = '[email protected]' 
URL = 'https://github.com/mblondel/lightning' 
LICENSE = 'new BSD' 
DOWNLOAD_URL = 'https://github.com/mblondel/lightning' 
VERSION = '0.1-git' 

import setuptools # we are using a setuptools namespace 
from numpy.distutils.core import setup 


def configuration(parent_package='', top_path=None): 
    if os.path.exists('MANIFEST'): 
     os.remove('MANIFEST') 

    from numpy.distutils.misc_util import Configuration 
    config = Configuration(None, parent_package, top_path) 

    config.add_subpackage('lightning') 

    return config 

if __name__ == "__main__": 

    old_path = os.getcwd() 
    local_path = os.path.dirname(os.path.abspath(sys.argv[0])) 

    os.chdir(local_path) 
    sys.path.insert(0, local_path) 

    setup(configuration=configuration, 
      name=DISTNAME, 
      maintainer=MAINTAINER, 
      include_package_data=True, 
      scripts=["bin/lightning_train", 
        "bin/lightning_predict"], 
      maintainer_email=MAINTAINER_EMAIL, 
      description=DESCRIPTION, 
      license=LICENSE, 
      url=URL, 
      version=VERSION, 
      download_url=DOWNLOAD_URL, 
      long_description=LONG_DESCRIPTION, 
      zip_safe=False, # the package can run out of an .egg file 
      classifiers=[ 
       'Intended Audience :: Science/Research', 
       'Intended Audience :: Developers', 
       'License :: OSI Approved', 
       'Programming Language :: C', 
       'Programming Language :: Python', 
       'Topic :: Software Development', 
       'Topic :: Scientific/Engineering', 
       'Operating System :: Microsoft :: Windows', 
       'Operating System :: POSIX', 
       'Operating System :: Unix', 
       'Operating System :: MacOS' 
      ] 
    ) 

그리고 이것은 만들기 파일입니다

PYTHON ?= python 
CYTHON ?= cython 
NOSETESTS ?= nosetests 
DATADIR=$(HOME)/lightning_data 

# Compilation... 

CYTHONSRC= $(wildcard lightning/impl/*.pyx lightning/impl/randomkit/*.pyx) 
CSRC= $(CYTHONSRC:.pyx=.cpp) 

inplace: 
    $(PYTHON) setup.py build_ext -i 

all: cython inplace 

cython: $(CSRC) 

clean: 
    rm -f lightning/impl/*.c lightning/impl/*.html 
    rm -f `find lightning -name "*.pyc"` 
    rm -f `find lightning -name "*.so"` 

%.cpp: %.pyx 
    $(CYTHON) --cplus $< 

# Tests... 
# 
test-code: in 
    $(NOSETESTS) -s lightning 

test-coverage: 
    $(NOSETESTS) -s --with-coverage --cover-html --cover-html-dir=coverage \ 
    --cover-package=lightning lightning 

test: test-code test-doc 

# Datasets... 
# 
datadir: 
    mkdir -p $(DATADIR) 

# regression 
download-abalone: datadir 
    ./download.sh http://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/regression/abalone_scale 
    mv abalone_scale $(DATADIR) 

download-cadata: datadir 
    ./download.sh http://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/regression/cadata 
    mv cadata $(DATADIR) 

download-cpusmall: datadir 
    ./download.sh http://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/regression/cpusmall_scale 
    mv cpusmall_scale $(DATADIR) 

download-space_ga: datadir 
    ./download.sh http://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/regression/space_ga_scale 
    mv space_ga_scale $(DATADIR) 

download-YearPredictionMSD: datadir 
    ./download.sh http://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/regression/YearPredictionMSD.bz2 
    bunzip2 YearPredictionMSD.bz2 
    mv YearPredictionMSD $(DATADIR) 
    ./download.sh http://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/regression/YearPredictionMSD.t.bz2 
    bunzip2 YearPredictionMSD.t.bz2 
    mv YearPredictionMSD.t $(DATADIR) 

# binary classification 
download-adult: datadir 
    ./download.sh http://leon.bottou.org/_media/papers/lasvm-adult.tar.bz2 
    tar xvfj lasvm-adult.tar.bz2 
    mv adult $(DATADIR) 
    rm lasvm-adult.tar.bz2 

download-banana: datadir 
    ./download.sh http://leon.bottou.org/_media/papers/lasvm-banana.tar.bz2 
    tar xvfj lasvm-banana.tar.bz2 
    mv banana $(DATADIR) 
    rm lasvm-banana.tar.bz2 

download-covtype: datadir 
    ./download.sh http://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/binary/covtype.libsvm.binary.scale.bz2 
    bunzip2 covtype.libsvm.binary.scale.bz2 
    mv covtype.libsvm.binary.scale $(DATADIR) 

download-ijcnn: datadir 
    ./download.sh http://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/binary/ijcnn1.tr.bz2 
    ./download.sh http://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/binary/ijcnn1.t.bz2 
    bunzip2 ijcnn1.tr.bz2 
    bunzip2 ijcnn1.t.bz2 
    mv ijcnn1* $(DATADIR) 

download-real-sim: datadir 
    ./download.sh http://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/binary/real-sim.bz2 
    bunzip2 real-sim.bz2 
    mv real-sim $(DATADIR)/realsim 

download-reuters: datadir 
    ./download.sh http://leon.bottou.org/_media/papers/lasvm-reuters.tar.bz2 
    tar xvfj lasvm-reuters.tar.bz2 
    mv reuters $(DATADIR) 
    rm lasvm-reuters.tar.bz2 

download-url: datadir 
    ./download.sh http://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/binary/url_combined.bz2 
    bunzip2 url_combined.bz2 
    mv url_combined $(DATADIR) 

download-waveform: datadir 
    ./download.sh http://leon.bottou.org/_media/papers/lasvm-waveform.tar.bz2 
    tar xvfj lasvm-waveform.tar.bz2 
    mv waveform $(DATADIR) 
    rm lasvm-waveform.tar.bz2 

download-webspam: datadir 
    ./download.sh http://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/binary/webspam_wc_normalized_unigram.svm.bz2 
    bunzip2 webspam_wc_normalized_unigram.svm.bz2 
    mv webspam_wc_normalized_unigram.svm $(DATADIR)/webspam 

# multi-class 

download-dna: datadir 
    ./download.sh http://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/multiclass/dna.scale.tr 
    ./download.sh http://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/multiclass/dna.scale.t 
    mv dna* $(DATADIR) 

download-letter: datadir 
    ./download.sh http://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/multiclass/letter.scale.tr 
    ./download.sh http://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/multiclass/letter.scale.t 
    mv letter* $(DATADIR) 

download-mnist: datadir 
    ./download.sh http://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/multiclass/mnist.scale.bz2 
    bunzip2 mnist.scale.bz2 
    mv mnist.scale $(DATADIR) 
    ./download.sh http://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/multiclass/mnist.scale.t.bz2 
    bunzip2 mnist.scale.t.bz2 
    mv mnist.scale.t $(DATADIR) 

download-news20: datadir 
    ./download.sh http://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/multiclass/news20.scale.bz2 
    bunzip2 news20.scale.bz2 
    mv news20.scale $(DATADIR) 
    ./download.sh http://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/multiclass/news20.t.scale.bz2 
    bunzip2 news20.t.scale.bz2 
    mv news20.t.scale $(DATADIR) 

download-pendigits: datadir 
    ./download.sh http://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/multiclass/pendigits 
    ./download.sh http://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/multiclass/pendigits.t 
    mv pendigits* $(DATADIR) 

download-protein: datadir 
    ./download.sh http://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/multiclass/protein.tr.bz2 
    ./download.sh http://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/multiclass/protein.t.bz2 
    bunzip2 protein.tr.bz2 
    bunzip2 protein.t.bz2 
    mv protein* $(DATADIR) 

download-rcv1: datadir 
    ./download.sh http://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/multiclass/rcv1_train.multiclass.bz2 
    bunzip2 rcv1_train.multiclass.bz2 
    ./download.sh http://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/multiclass/rcv1_test.multiclass.bz2 
    bunzip2 rcv1_test.multiclass.bz2 
    mv rcv1* $(DATADIR) 

download-satimage: datadir 
    ./download.sh http://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/multiclass/satimage.scale.tr 
    ./download.sh http://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/multiclass/satimage.scale.t 
    mv satimage* $(DATADIR) 

download-sector: datadir 
    ./download.sh http://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/multiclass/sector/sector.scale.bz2 
    bunzip2 sector.scale.bz2 
    ./download.sh http://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/multiclass/sector/sector.t.scale.bz2 
    bunzip2 sector.t.scale.bz2 
    mv sector* $(DATADIR) 

download-usps: datadir 
    ./download.sh http://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/multiclass/usps.bz2 
    bunzip2 usps.bz2 
    mv usps $(DATADIR) 
    ./download.sh http://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/multiclass/usps.t.bz2 
    bunzip2 usps.t.bz2 
    mv usps.t $(DATADIR) 

그리고 컴파일하는 동안, 나는이 출력을 얻을

,

compile options: '-I/home/is/anaconda/lib/python2.7/site-packages/numpy/core/include -I/home/is/lightning/lightning/impl/randomkit -I/home/is/anaconda/lib/python2.7/site-packages/numpy/core/include -I/home/is/anaconda/include/python2.7 -c' 
c++: svrg_fast.cpp 

차라리 것 .pyx을로 쉽게 변환 할 수 있으므로 설치시 .c 코드를 컴파일해야합니다.. 또는 .pyx를 C++로 변환 할 수 있습니까?

미리 감사드립니다.

+0

'setup.py'는 어떻게 생겼습니까? [this] (http://docs.cython.org/src/quickstart/build.html)을 읽으셨습니까? – grc

+0

질문이 업데이트되었습니다. :) – Curious

+0

나는이 물건에 대한 전문가가 아니지만'ext_modules = cythonize ("*. pyx")'를'setup()'에 추가하면 어떻게 될까? 그리고'Cython.Build import cythonize'에서. – grc

답변

0

그냥 할 방법을 찾았습니다.

의 내가 file.pyx에 변경을하고 말을하자, 나는, 나는 단순히 실행하여 모듈을 재 구축, 그런 다음 실행하여 .cpp

cython --cplus file.pyx

를 컴파일 할 수

sudo python setup.py develop

희망이 도움이됩니다!

관련 문제