2013-08-02 28 views
5

Có một gói Python với một setup.py mà đọc thusly:Đánh dấu Cython là Phụ thuộc Xây dựng?

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' 
) 

setup.py này không thể được nhập khẩu nếu Cython không được cài đặt. Theo như tôi biết, việc nhập setup.py là cách các công cụ như pip tìm ra sự phụ thuộc của gói. Tôi muốn thiết lập gói này để nó có thể được tải lên PyPI, với thực tế là nó phụ thuộc vào Cython được lưu ý, để Cython sẽ được tải xuống và cài đặt khi bạn cố gắng "pip install fastahack", hoặc khi bạn cố gắng " pip cài đặt "trực tiếp từ kho Git.

Tôi sẽ đóng gói mô-đun này như thế nào để cài đặt chính xác từ Internet khi Cython chưa được cài đặt? Luôn sử dụng phiên bản Cython mới nhất sẽ là một dấu cộng.

Trả lời

1

Sử dụng tryexcept để nhập Cython nhập và sửa đổi setup của bạn dựa trên việc nhập của bạn có thành công hay không. Nhìn vào setup.py của gấu trúc cho một example

3

mẫu chuẩn của tôi cho 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} 

Và đừng quên để cung cấp gia hạn các file .c với gói - cho phép người dùng để xây dựng mô-đun mà không cài đặt cython.

+0

Đây thực sự không phải là điều được yêu cầu; mục tiêu là tự động cài đặt cython như một sự phụ thuộc ... – SamB

+0

@SamB, bạn có bất kỳ cập nhật nào về việc làm cho cython trở thành phụ thuộc không? – zyxue

+0

@zyxue: Không, tôi cũng không tìm được cách để làm điều đó. – SamB

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