2011-08-29 16 views
19

Nhiều bài đăng về các khía cạnh khác nhau của câu hỏi này nhưng tôi chưa thấy bài đăng nào kết hợp tất cả.Thực tiễn tốt nhất để triển khai Python - nhiều phiên bản, vị trí cài đặt chuẩn, công cụ đóng gói, v.v.

Đầu tiên một tuyên bố chủ quan: có vẻ như sự đơn giản mà chúng tôi gặp phải khi làm việc với ngôn ngữ Python được cắt thành từng mảnh khi chúng tôi di chuyển ra ngoài trình thông dịch và bắt đầu vật lộn với các vấn đề triển khai. Cách tốt nhất để có nhiều phiên bản Python trên cùng một máy? Các gói phải được cài đặt ở đâu? Disutils vs setuptools so với pip vv Có vẻ như Zen của Python đang bị lạm dụng khá tệ khi nói đến triển khai. Tôi đang cảm nhận được những âm thanh kỳ lạ của trải nghiệm "DLL hell" trên Windows.

Các chuyên gia có đồng ý về một số mức độ thực hành tốt nhất về những câu hỏi này không?

Bạn có chạy nhiều phiên bản Python trên cùng một máy không? Làm thế nào để bạn vẫn tự tin rằng họ có thể cùng tồn tại - và phiên bản mới hơn không phá vỡ các giả định của các quá trình khác dựa trên phiên bản trước đó (các kịch bản được cung cấp bởi nhà cung cấp hệ điều hành) chẳng hạn? Điều này có an toàn không? Virtualenv có đủ không?

Lựa chọn tốt nhất cho các vị trí cho các thành phần khác nhau của môi trường Python (bao gồm gói bên thứ 3) trên hệ thống tệp cục bộ là gì? Có sự tương ứng chặt chẽ hoặc thô lỗ giữa các vị trí cho nhiều phiên bản khác nhau của Unixy và Windows OS có thể dựa vào không?

Và góc tối nhất của đầm lầy - bạn sử dụng công cụ cài đặt nào (setuptools, distutils, pip etc.) và chúng hoạt động tốt với các lựa chọn của bạn: vị trí tệp, môi trường ảo Python, đường dẫn Python, v.v.

Những âm thanh này giống như các câu hỏi khó. Tôi hy vọng các Pythonistas có kinh nghiệm có thể đã định nghĩa một cách tiếp cận kinh điển (hoặc hai) cho những thách thức này. Bất kỳ cách tiếp cận nào "treo với nhau" như một hệ thống có thể được sử dụng với sự tự tin (cảm thấy ít giống như các công cụ riêng biệt, không liên quan) sẽ rất hữu ích.

+1

Tôi nghĩ câu hỏi này là định nghĩa quá rộng. – agf

+0

Kể từ khi đặt câu hỏi này, tôi đã trở thành một fan hâm mộ của 'virtualenvwrapper' - nó đơn giản hoá nhiều vấn đề tôi đã hỏi. Vẫn còn những vấn đề kỳ lạ với mỗi công cụ phân phối biến thể, nhưng có môi trường Python có tường chắn có thể được chuyển vào và ra khỏi một cách nhanh chóng giúp ích rất nhiều. –

Trả lời

2

Tôi đồng ý đây là một câu hỏi khá rộng, nhưng tôi sẽ cố gắng giải quyết nhiều phần của nó.

Về tuyên bố chủ quan của bạn: Tôi không hiểu tại sao sự đơn giản và thanh lịch của Python sẽ ngụ ý rằng vấn đề đóng gói và triển khai đột nhiên sẽ trở thành những điều đơn giản. Một số điều liên quan đến bao bì rất đơn giản, khác không phải là, khác có thể được. Nó sẽ là tốt nhất cho người dùng nếu chúng tôi có một hệ thống đóng gói hoàn chỉnh, mạnh mẽ và dễ dàng, nhưng nó đã không quay theo cách đó. distutils được tạo ra và sau đó phát triển của nó bị tạm dừng, setuptools đã được tạo và thêm các giải pháp mới và các vấn đề mới, phân phối được chia nhỏ từ setuptools vì các vấn đề xã hội, và cuối cùng distutils2 được tạo ra để làm cho một thư viện chính thức hoàn chỉnh.(Thông tin thêm về Differences between distribute, distutils, setuptools and distutils2?) Tình huống này rất lý tưởng cho các nhà phát triển và người dùng, nhưng chúng tôi đang nỗ lực để cải thiện nó.

Cách tốt nhất để có nhiều phiên bản Python trên cùng một máy? Sử dụng trình quản lý gói của bạn nếu bạn đang sử dụng hệ điều hành hiện đại hoặc sử dụng "make altinstall" nếu bạn biên dịch từ nguồn trên UNIX hoặc sử dụng lược đồ cài đặt không xung đột tương tự nếu bạn biên dịch từ nguồn trên Windows. Là một người dùng Debian, tôi biết rằng tôi có thể gọi các phiên bản riêng lẻ bằng cách sử dụng “pythonX.Y” và rằng các phiên bản mặc định (“python” và “python3”) là do các nhà phát triển Debian quyết định. Một vài hệ điều hành đã bắt đầu phá vỡ giả định rằng python == python2, do đó, có một PEP đang tiến hành để ban phước hoặc lên án rằng: http://www.python.org/dev/peps/pep-0394/ Windows dường như thiếu cách sử dụng một phiên bản Python như mặc định, vì vậy có một PEP khác: http://www.python.org/dev/peps/pep-0397/

Các gói phải được cài đặt ở đâu? Sử dụng các distutils, tôi có thể cài đặt các dự án vào thư mục site-package của người dùng của tôi (xem PEP 370 hoặc docs.python.org). Câu hỏi chính xác là gì?

Cài đặt song song các phiên bản khác nhau của cùng một dự án không được hỗ trợ. Nó sẽ cần một PEP để thảo luận về những thay đổi đối với hệ thống nhập khẩu và các công cụ đóng gói. Trước khi ai đó bắt đầu cuộc thảo luận đó, việc sử dụng virtualenv hoặc buildout hoạt động đủ tốt.

Tôi không hiểu câu hỏi về vị trí của "các thành phần của môi trường Python".

Tôi chủ yếu sử dụng các gói hệ thống (tức là sử dụng trình quản lý gói Aptitude trên Debian). Để thử các dự án, tôi sao chép kho lưu trữ của họ. Nếu tôi cần một cái gì đó không có sẵn với Aptitude, tôi cài đặt (hoặc đặt một tệp .pth vào repo) trong thư mục gói trang web của người dùng của tôi. Tôi không cần PYTHONPATH tùy chỉnh, nhưng tôi đã thay đổi vị trí của các gói trang web của người dùng bằng PYTHONUSERBASE. Tôi không thích phép thuật và khái niệm về trứng trong các công cụ thiết lập/phân phối, vì vậy tôi không sử dụng chúng. Tôi đã bắt đầu sử dụng virtualenv và pip cho một dự án mặc dù (họ sử dụng setuptools dưới trang bìa, nhưng tôi đã cài đặt riêng nên Python toàn cầu của tôi không có setuptools).

0

Một tài nguyên cho khu vực này là cuốn sách Lập trình Python chuyên gia của Tarek Ziade. Tôi mâu thuẫn về chất lượng của cuốn sách, nhưng các chủ đề được đề cập chỉ là những gì bạn đang tập trung vào.

8

Tôi đã tìm thấy rằng virtualenv là cách đáng tin cậy duy nhất để định cấu hình và duy trì nhiều môi trường trên cùng một máy. Nó thậm chí còn có một cách để đóng gói môi trường và cài đặt nó trên một máy khác.

Để quản lý gói, tôi luôn sử dụng pip vì nó hoạt động rất độc đáo với virtualenv. Nó cũng giúp dễ dàng cài đặt và nâng cấp các gói từ nhiều nguồn khác nhau như kho chứa git.

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