2009-05-15 29 views
27

Tôi đang bắt đầu một dự án python nhỏ/vừa, có khả năng trong Phát triển thử nghiệm. Nguồn gốc của tôi là nhiều hơn trong C và java hơn python (tôi đã sử dụng kiến ​​và makefile)xây dựng (các) công cụ nào bạn khuyên dùng cho python?

Tôi biết rằng trong python bạn có thể không cần một công cụ xây dựng, nhưng tôi sẽ, bởi vì tôi sẽ sử dụng cython và PyInstaller (điều nên làm việc trên một vài UNIX khác nhau, không phụ thuộc trực tiếp vào python) và tôi muốn sự tiện lợi của việc chọn các mẫu thử CLI, xây dựng tài liệu, có thể kiểm tra các phụ thuộc, v.v.

Somebody phàn nàn rằng python thiếu giống như công cụ. Tôi biết rằng có ít công cụ tồn tại, như sconpaver, nhưng tôi muốn nghe từ người dùng thực sự chứ không chỉ là trang web của họ. Có ai sử dụng paver không?

Trình setup.py thông thường đi kèm với nhiều gói là gì? Tôi nhìn vào một vài để xem nếu có một cách sử dụng thông thường, nhưng tôi đã không tìm thấy bất cứ điều gì thú vị (có lẽ tôi sử dụng các ví dụ sai)

Bạn có khuyên bạn nên gắn bó với những điều tôi đã biết (ant và Makefile) ít nhất để bắt đầu? Nếu vậy, có bất kỳ phần mở rộng kiến ​​bạn đề nghị cho python (+ cython + pyinstaller + pyUnit)?


EDIT: để tránh câu trả lời thêm như jwp của một, lưu ý rằng, đối với dự án này, tôi hoàn toàn cần chương trình của tôi trở thành một thực thi độc lập vì nó là hoàn toàn không thể có một con trăn VM trên nền tảng mục tiêu ở đâu tệp thực thi sẽ chạy. Tôi có chính xác cùng một hw có sẵn để biên dịch, vì vậy may mắn tôi không cần phải biên dịch chéo (nhưng tôi muốn làm phát triển trên một Linux thân thiện hơn).

Tôi cũng muốn thử nghiệm nếu mã của tôi biên dịch trong Cython ngay từ đầu, không tối ưu hóa sớm, nhưng chỉ để chắc chắn rằng tôi sẽ không đi quá xa với việc sử dụng các tính năng không tương thích, tái cấu trúc đau đớn nếu Cython sẽ rất cần thiết.

Vì vậy, hãy tập trung vào câu hỏi thực tế của tôi

+0

Scons rất đẹp. –

Trả lời

10

yêu cầu của bạn đề nghị thay Scons đó, theo trang web của họ, có kiểm soát nhiều hơn loạt các nhiệm vụ xây dựng hơn Paver. Trong phần sau, bạn sẽ sử dụng rất nhiều sh() chạy một chương trình dòng lệnh thông thường.

Gần đây, tôi bắt đầu sử dụng Paver thực sự tuyệt vời để chạy thử nghiệm, tạo tài liệu với Sphinx, nhưng tôi chỉ sử dụng Python thuần túy. Nếu bạn muốn xem những gì có thể với Paver, tôi khuyên bạn nên xem xét 2 bài viết sau: converting-from-make-to-paverwriting-technical-documentation bởi Doug Hellmann và bạn chắc chắn muốn kiểm tra pavement.py configuration file.

4

Tôi đã sử dụng setuptools cho điều này, đôi khi kết hợp với Ant cho các công cụ phức tạp hơn, hoặc tích hợp với khác xây dựng. Nói chung nó đã làm việc tốt cho tôi, nhưng tôi đã nghe một số người tại #python (freenode) phàn nàn về chất lượng nguồn chung thấp cho gói này, và đề xuất tiêu chuẩn distutils.

Một điều cần thực sự theo dõi nếu bạn quen với Java (như tôi), là trăn không hỗ trợ các gói tách. Tức là, bạn không thể đặt site.db trong src/site/db, site.view trong src2/site/view, đặt src và src2 trên PYTHONPATH và mong đợi mọi thứ hoạt động. Điều này gây ra đau đầu lớn cho tôi với các công cụ xây dựng, nó làm việc một chút lẻ tẻ :)

14

Nếu có thể, tôi khuyên bạn nên tránh các mô-đun mở rộng (C/cython) trong đầu. Nhận tất cả mã của bạn được viết bằng Python, sử dụng cấu hình đơn giản distutils, chạy thử nghiệm của bạn bằng cách sử dụng -m (python -m mypkg.test.testall hoặc bất kỳ thứ gì; nhập unittest).

Khi bạn nhận dự án của mình ở trạng thái thoải mái, sau đó bắt đầu giải quyết một số tối ưu hóa với cython và quản lý dự án bổ sung đi kèm với điều đó. các nhánh có thể xây dựng các mô-đun mở rộng, vì vậy tôi không chắc chắn bạn sẽ cần thực hiện/scons ..

project-dir/ 
    setup.py 
    mypkg/ 
    __init__.py 
    mymod.py 
    test/ 
    __init__.py 
    testall.py 
    testsomething_specific.py 
+5

+1: Tránh các công cụ xây dựng và C cho đến khi bạn hoàn toàn cần chúng, và có thể chứng minh rằng bạn có thuật toán đúng, nhưng nó quá chậm. Cho đến khi bạn có thể chứng minh rằng bạn cần C, tránh nó. –

+0

Tôi hiểu điểm này và đồng ý chung. Nhưng trong trường hợp cụ thể này, tôi hoàn toàn cần C ngay từ đầu. Tôi có thể tránh tối ưu hóa (và có thể Cython) nhưng tôi cần chương trình là một thực thi độc lập (và do đó pyInstaller) vì có một máy ảo python trên nền tảng đích không phải là một tùy chọn. Tôi cũng muốn thử nghiệm nếu mã của tôi biên dịch trong Cython, chỉ để chắc chắn rằng tôi sẽ không đi quá xa với việc sử dụng các tính năng không tương thích, mà sẽ làm cho nó vô dụng, khi Cython sẽ được nghiêm túc cần thiết. – Davide

+0

Cython khá tốt. Chỉ cần tránh đóng cửa trong mã của bạn và phần còn lại sẽ được tái cấu trúc nhỏ (tốt, và tôi đã nhìn thấy nói về đóng cửa trên cython-dev để có thể không phải là một thực hành cần thiết cho lâu hơn nữa). AFA nhu cầu tuyệt đối đối với C, bạn có thấy mô-đun ctypes không? Hoặc làm mô-đun mở rộng Python không đủ? Tôi chưa từng sử dụng pyInstaller, có phải bất cứ thứ gì như py2exe không? Có thể đã tuyên thệ py2exe làm việc với setuptools/distutils. Cython sẽ cung cấp cho * thẳng tinh khiết-Python * tăng 30% tốc độ. Rất có thể là bạn sẽ muốn nhiều hơn thế nếu ứng dụng này reqs hiệu suất. (ví dụ, "cython lang" hoặc C) – jwp

4

Một công cụ tôi yêu là virtualenv: http://pypi.python.org/pypi/virtualenv

từ trang web: những gì nó không virtualenv là một công cụ để tạo ra môi trường Python bị cô lập. Vấn đề cơ bản đang được giải quyết là một trong các phụ thuộc và các phiên bản, và các quyền gián tiếp. Hãy tưởng tượng bạn có một ứng dụng cần phiên bản 1 của LibFoo, nhưng một ứng dụng khác yêu cầu phiên bản 2. Bạn có thể sử dụng cả hai ứng dụng này như thế nào? Nếu bạn cài đặt mọi thứ vào /usr/lib/python2.4/site-packages (hoặc bất kỳ vị trí chuẩn nào của nền tảng của bạn), thật dễ dàng để kết thúc trong một tình huống mà bạn vô tình nâng cấp một ứng dụng không nên nâng cấp.

Bạn cũng có thể thử: http://pypi.python.org/pypi/zc.buildout

từ trang web: Dự án buildout cung cấp hỗ trợ cho việc tạo các ứng dụng, đặc biệt là các ứng dụng Python. Nó cung cấp các công cụ để lắp ráp các ứng dụng từ nhiều phần, Python hay cách khác. Một ứng dụng thực sự có thể chứa nhiều chương trình, quy trình và cài đặt cấu hình.

Đã thử một vài lần, tuyệt vời cho việc triển khai các điều kiện phát triển, có thể quá nhiều cho nhu cầu của bạn.

Tôi cũng đã được thông báo và đọc ở một vài nơi mà mũi là một công cụ kiểm tra rất thú vị http://somethingaboutorange.com/mrl/projects/nose/0.11.1/, Tôi đang tìm một số thời gian rảnh để dùng thử.

Hy vọng Nó giúp Chúc mừng, Ale

3

để tránh các câu trả lời khác như của jwp, lưu ý rằng, đối với dự án này, tôi hoàn toàn không cần chương trình độc lập vì hoàn toàn không thể có máy ảo python trên nền tảng đích nơi tệp thực thi sẽ chạy. Tôi có chính xác cùng một hw có sẵn để biên dịch, vì vậy may mắn tôi không cần phải biên dịch chéo (nhưng tôi muốn làm phát triển trên một Linux thân thiện hơn).

Tôi cũng muốn thử nghiệm nếu mã của tôi biên dịch trong Cython ngay từ đầu, không phải để tối ưu hóa sớm, nhưng chỉ để chắc chắn rằng tôi sẽ không đi quá xa với việc sử dụng các tính năng không tương thích, tái cấu trúc đau đớn nếu Cython sẽ rất cần thiết.

Nếu tất cả những gì bạn đang tìm kiếm là có một tệp thực thi độc lập, bạn không cần chạy Cython.Có một vài thư viện tốt để làm điều này:

Tuy nhiên, để chạy mã Python, bạn chỉ cần đi phải cài đặt một phiên dịch hoặc máy ảo trên máy mục tiêu ở một số hình thức hoặc thời trang. Các giải pháp tôi trình bày liên quan đến việc chỉ nhúng trình thông dịch để dễ cài đặt hơn. Trong thực tế, tôi khá chắc chắn (nhưng có thể là sai) mà Cython sẽ không cho phép bạn xây dựng một thực thi độc lập. Nó chủ yếu có nghĩa là để tạo các phần mở rộng cho trình thông dịch Python.

Tuy nhiên, có một vài lựa chọn thay thế khác. Nếu bạn có trình thông dịch Java trên máy đích, bạn có thể chạy Jython. Ngoài ra còn có một số IronPython cho .net. Tuy nhiên, bạn vẫn sẽ phải phân phối các thời gian chạy cho các ngôn ngữ này với dự án của bạn.

Tóm lại, nếu bạn muốn thực thi độc lập không phụ thuộc, lựa chọn duy nhất của bạn là khá nhiều để đi thẳng với C hoặc C++.

+0

Cảm ơn thư. Như tôi đã viết trong câu hỏi, đây là linux/unix, do đó py2exe và py2app không phải là công cụ thích hợp. Tôi đánh giá freeze.py nhưng cuối cùng đã chọn cho pyInstaller, như tôi cũng đã đề cập trong câu hỏi. Cuối cùng có, Cython (một mình) không cho phép xây dựng độc lập thực thi, nhưng pyInstaller làm (và nó hoạt động độc đáo với pyInstaller) – Davide

1

Nếu bạn đang tìm kiếm một công cụ xây dựng dựa trên python đơn giản. Hãy xem pynt. Nhiệm vụ trong pynt chỉ là (trang trí) chức năng python. Nó cũng hỗ trợ tham số kiểu Rake đi qua nhiệm vụ.

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