2013-08-02 14 views
5

Es ist ein Python-Paket mit einem setup.py, die thusly lautet:Cython als Buildabhängigkeit markieren?

from distutils.core import setup 
from distutils.extension import Extension 
from Cython.Distutils import build_ext 

setup(
    name = 'fastahack', 
    ext_modules=[ 
    Extension("fastahack.cfastahack", 
       sources=["fastahack/cfastahack.pyx", "lib/Fasta.cpp", "lib/split.cpp"], 
       libraries=["stdc++"], 
       include_dirs=["lib/"], 
       language="c++"), 
    ], 
    package_data = {'lib': ['*.pyx', "*.c", "*.h", "README.rst"]}, 
    package_dir = {"fastahack": "fastahack"}, 
    cmdclass = {'build_ext': build_ext}, 
    packages = ['fastahack', 'fastahack.tests'], 
    author = "Brent Pedersen", 
    author_email="[email protected]", 
    #test_suite='nose.collector' 
) 

Diese setup.py nicht importiert werden kann, wenn Cython nicht installiert ist. Soweit ich weiß, importieren Tools wie Pip mit setup.py die Abhängigkeiten eines Pakets. Ich möchte dieses Paket so einrichten, dass es auf PyPI hochgeladen werden kann, mit der Tatsache, dass es von Cython abhängt, so dass Cython heruntergeladen und installiert wird, wenn Sie versuchen, "pip install fastahack", oder wenn Sie es versuchen " pip install "direkt aus dem Git-Repository.

Wie würde ich dieses Modul so verpacken, dass es korrekt aus dem Internet installiert wird, wenn Cython nicht installiert ist? Immer die neueste Version von Cython zu verwenden wäre ein Pluspunkt.

Antwort

1

ein Verwenden try und except für die Cython importieren und bearbeiten Sie Ihre setup basierend auf, ob Ihr Import erfolgreich ist. Schauen Sie sich die setup.py von Pandas für eine example

3

Meine Standardvorlage für setup.py:

 
have_cython = False 
try: 
    from Cython.Distutils import build_ext as _build_ext 
    have_cython = True 
except ImportError: 
    from distutils.command.build_ext import build_ext as _build_ext 

if have_cython: 
    foo = Extension('foo', ['src/foo.pyx']) 
else: 
    foo = Extension('foo', ['src/foo.c']) 

setup (
    ... 
    ext_modules=[foo], 
    cmdclass={'build_ext': build_ext} 

Und nicht vergessen Erweiterung .c-Dateien mit dem Paket zur Verfügung zu stellen - das Benutzer erlauben Modul zu bauen, ohne Cython installieren.

+0

Dies ist nicht wirklich, was gefragt wurde, obwohl; Das Ziel war, Cython automatisch als Abhängigkeit zu installieren ... – SamB

+0

@SamB, hast du irgendwelche Updates, um Cython als Abhängigkeit zu machen? – zyxue

+0

@zyxue: Nein, ich habe auch keinen Weg gefunden, es zu tun. – SamB