2011-11-09 57 views
5

Tôi đang gặp sự cố với cython trong quá trình xây dựng.Xây dựng với phần xây dựng với Cython

Một trong những phần là xây dựng mô-đun với cython từ tệp .c và tệp .pyx.

Tôi đã thử nhiều giải pháp:

Nhưng tất cả kết thúc với lỗi:

ImportError: No module named Cython.Distutils

append này khi buildout nạp setup.py của mô-đun cython này.

Lưu ý rằng setup.py là chức năng khi được gọi từ thư mục riêng của nó và với một thông dịch viên trong thư mục bin xây dựng.

Cảm ơn sự giúp đỡ của bạn.

+0

Bạn có chắc chắn Cython đã được cài đặt đúng chưa và bạn đã đặt biến môi trường 'PYTHONPATH' để bao gồm thư mục nơi các mô-đun Cython sống? –

+0

Ý của bạn là ở cấp hệ thống? Điều này sẽ làm cho việc xây dựng này không thể được triển khai trên một hệ thống không có cython ...? –

+0

Bạn có ý nghĩa gì với "mức hệ thống"? –

Trả lời

4

Bài viết bạn đã liên kết cho bạn biết cách cài đặt Cython từ bản dựng, nhưng để thực hiện điều đó, bạn cần quyền truy cập ghi vào thư mục site-packages. Có 3 cách bạn nên có thể chạy những buildouts:

  1. Run nó như là người chủ và cài đặt Cython vào trang web gói hệ thống của python. Thông thường bạn muốn tránh làm điều này.

  2. Biên dịch Python của riêng bạn. Đây có thể là tùy chọn duy nhất nếu bạn muốn sử dụng phiên bản Python chưa có trên hệ thống. Có các cấu hình xây dựng sẽ cho phép bạn tạo bất kỳ phiên bản nào của Python từ bên trong bản dựng.

  3. Sử dụng virtualenv. Điều này sẽ tạo (trong thư mục xây dựng) một môi trường ảo hoàn chỉnh cho Python bao gồm thư mục site-packages của riêng bạn. Đây thường là cách tốt nhất để chạy một bản xây dựng có thể sử dụng hệ thống Python (hoặc bất kỳ Python nào khác mà bạn đã cài đặt toàn bộ hệ thống).

Tôi khuyên bạn nên sử dụng virtualenv một phần hướng dẫn cài đặt cho phần mềm của bạn.

+0

Cảm ơn bạn đã đề xuất này, tôi sẽ đào theo cách này. –

1

Không có cách nào để thực hiện việc này dưới dạng một bước, nhưng thật dễ dàng để thực hiện quy trình hai bước.

Sử dụng:

python bootstrap.py 
./bin/buildout install cython 
./bin/cpy bootstrap.py 
./bin/cpy ./bin/buildout 

Lý do này có thể là bởi vì buildout hỗ trợ một tùy chọn vô danh 'cài đặt' mà không ai nói về, nhưng bạn thể sử dụng nó, như thế này:

[buildout] 
parts = deps py # <---- Notice we don't depend on cython here 
eggs = 
    whatever 
    kdist 
    nark 
    kivy # <--- But we do have a module that requires cython to build 
develop = 
    . 
    lib/nark 
    lib/kivy-dist 

[cython] # <---- By calling ./bin/buildout install cython we trigger this 
recipe = zc.recipe.egg:script 
parts = cython-py 
interpreter = cpy # <--- Which makes our dummy ./bin/cpy 
eggs = 
    cython 
    pyinstaller 

[deps] 
recipe = zc.recipe.egg:eggs 
eggs = ${buildout:eggs} 

[py] 
recipe = zc.recipe.egg:script 
interpreter = py 
eggs = ${buildout:eggs} 

Điều dễ thương về cách tiếp cận này là chạy buildout lần thứ hai xóa thư mục bin vì vậy vào cuối ngày, bạn còn lại với một thư mục bin ooks như thế này:

$ ls bin/ 
buildout garden py 

Không có gói thừa nào có thể hoặc không được treo xung quanh trong virtualenv và vít những thứ sau này. Đó là lý do tại sao chúng tôi đang sử dụng buildout ngay từ đầu?

... tất nhiên, nếu bạn muốn cython để treo xung quanh, juts dính nó vào các phụ thuộc ở đầu trang là tốt.

+0

Vì vậy, mát mẻ không biết về về tham số đó và đó là phần còn thiếu tôi đang tìm kiếm (để không xây dựng lại tất cả các bộ phận luôn luôn khi chạy buildout). Gracias! –

2

Tôi đã tìm thấy hôm nay công thức này https://pypi.python.org/pypi/mr.cython/1.0 giải quyết vấn đề.

này giải quyết vấn đề bằng cách cài đặt cython với một công thức gia hạn vì thế nó có sẵn khi buildout chạy setup.py develop

Vấn đề là để xây dựng một mô-đun cython mà không cần phải cài đặt như cython cấp hệ thống.

+0

Câu trả lời có vẻ ổn với tôi. OP đang trả lời câu hỏi của riêng mình với một giải pháp và ngữ cảnh có liên quan. –

+0

Thực tế là OP trở lại vài năm sau khi câu hỏi ban đầu để cung cấp một câu trả lời là rất nhiều trong tinh thần của StackOverflow và xứng đáng upvotes. Xem XKCD có liên quan: https://xkcd.com/979/ –

+0

@ HåkenLid: Vâng, tôi cũng đã upvoted. @ OP: Bạn cũng có thể chấp nhận câu trả lời của bạn :-) –

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