2009-10-13 28 views
11

Thông thường tôi có xu hướng cài đặt mọi thứ thông qua trình quản lý gói. Tuy nhiên, khi tôi lập trình rất nhiều perl, tôi sẽ sử dụng CPAN, các phiên bản mới hơn và tất cả những điều đó.Đó là loại pythonic nhất: cài đặt các mô-đun python thông qua trình quản lý gói (macports, apt) hoặc thông qua pip/easy_install/setuptools

Nói chung, tôi đã sử dụng để cài đặt hệ thống thứ qua quản lý gói, và các công cụ ngôn ngữ thông qua quản lý gói riêng của nó (đá quý/easy_install | pip/CPAN)

Bây giờ sử dụng python chủ yếu, tôi tự hỏi thực hành tốt nhất là gì ?

Trả lời

17

Phiên bản python hệ thống và thư viện của nó thường được phần mềm sử dụng trong bản phân phối. Miễn là phần mềm bạn đang sử dụng rất hài lòng với cùng một phiên bản của python và tất cả các thư viện như phân phối của bạn, hơn là việc sử dụng các gói phân phối sẽ hoạt động tốt.

Tuy nhiên, bạn thường cần phiên bản phát triển của gói hoặc phiên bản mới hơn hoặc phiên bản cũ hơn. Và sau đó nó không hoạt động nữa. Do đó, thường được khuyến nghị cài đặt phiên bản Python của riêng bạn mà bạn sử dụng để phát triển và tạo môi trường phát triển với buildout hoặc virtualenv hoặc cả hai, để tách biệt hệ thống python và môi trường phát triển với nhau.

+1

[pyenv] (https://github.com/yyuu/pyenv#readme) là một công cụ tuyệt vời để quản lý nhiều phiên bản Python và [virtualenvs] (https://github.com/yyuu/pyenv-virtualenv#readme). –

17

Có hai trại hoàn toàn phản đối: một trong các lợi ích của các gói do hệ thống cung cấp và một ưu tiên cho việc cài đặt riêng biệt. Cá nhân tôi trong trại "gói hệ thống". Tôi sẽ cung cấp các đối số từ mỗi bên dưới đây.

Gói hệ thống chuyên nghiệp: bộ đóng gói hệ thống đã quan tâm đến sự phụ thuộc và tuân thủ các chính sách hệ thống tổng thể (chẳng hạn như bố cục tệp). Các gói hệ thống cung cấp các bản cập nhật bảo mật trong khi vẫn quan tâm đến việc không phá vỡ khả năng tương thích - vì vậy đôi khi chúng sẽ khắc phục các bản sửa lỗi bảo mật mà các tác giả ngược dòng không trả lại. Các gói hệ thống là "an toàn" wrt. nâng cấp hệ thống: sau khi nâng cấp hệ thống, bạn có thể cũng có phiên bản Python mới, nhưng tất cả các mô-đun Python của bạn vẫn ở đó nếu chúng đến từ trình đóng gói hệ thống. Đó là tất cả trải nghiệm cá nhân với Debian.

Gói hệ thống con: không phải tất cả phần mềm có thể được cung cấp dưới dạng gói hệ thống hoặc không có trong phiên bản mới nhất; tự cài đặt nội dung vào hệ thống có thể phá vỡ các gói hệ thống. Nâng cấp có thể phá vỡ ứng dụng của bạn.

Cài đặt riêng biệt Pro: Một số người (trong các nhà phát triển ứng dụng web cụ thể) cho rằng bạn hoàn toàn cần thiết lập lặp lại, chỉ với các gói bạn muốn và hoàn toàn tách khỏi hệ thống Python. Điều này vượt ra ngoài các gói hệ thống tự cài đặt so với các gói hệ thống, vì ngay cả khi tự cài đặt, bạn vẫn có thể sửa đổi hệ thống python; với việc cài đặt riêng biệt, bạn sẽ không. Như Lennart thảo luận, hiện nay có các chuỗi công cụ chuyên dụng để hỗ trợ thiết lập này. Mọi người cho rằng chỉ có cách tiếp cận này mới có thể đảm bảo kết quả lặp lại.

Cài đặt riêng biệt: bạn cần tự giải quyết các lỗi và bạn cần đảm bảo rằng tất cả người dùng của mình đều sử dụng cài đặt riêng. Trong trường hợp các ứng dụng web, sau này thường dễ đạt được.

+0

Đủ công bằng. Tôi luôn luôn tự hỏi tại sao setuptools và đặc biệt là rubygems et al không cài đặt vào/usr/cây địa phương, đó là nơi cho những thứ được, tốt, địa phương. Ah tốt. Đối với những gì nó có giá trị, là một sysadmin là tốt (chúng ta không phải tất cả nhiều điều?) Tôi thích cách tiếp cận của bạn. Dường như là khá khó khăn với python.Giữ mũi của tôi và đi "lộ trình môi trường phát triển" – chiggsy

+1

Tôi hoàn toàn đồng ý rằng các gói distro là thích hợp hơn khi cài đặt trong hệ thống Python. Nhưng điều đó cho công việc phát triển, và cũng là một hệ thống sản xuất làm được rất nhiều, bạn sẽ muốn môi trường riêng biệt cho các phần mềm riêng biệt (trừ khi tất cả chúng đều được cập nhật và duy trì các gói distro). –

+0

Là một chính sách cá nhân, tôi không sử dụng phần mềm mà không có gói hệ thống, hoặc từ một phiên bản khác với gói phần mềm hệ thống cung cấp. Điều này có thể có nghĩa là tôi không thể sử dụng nhiều gói - may mắn khó khăn; Tôi sẽ có thể phải thực hiện lại công cụ. Về mặt cộng, tôi bị hạn chế sử dụng phần mềm "ổn định", vì vậy tôi thực sự không cần phải theo dõi từng bản phát hành phát triển chỉ vì một số thư viện quyết định yêu cầu phiên bản chưa được phát hành của một số gói khác. –

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