Tôi đang thảo luận với một số nhà phát triển khác về dự án nguồn mở. Tôi mới đến python nhưng có vẻ như với tôi rằng các gói trang web có nghĩa là cho các thư viện và không phải là các ứng dụng người dùng cuối. Điều đó đúng hay là các gói trang web là một nơi thích hợp để cài đặt một ứng dụng có nghĩa là được điều hành bởi một người dùng cuối?Các gói trang web có phù hợp cho các ứng dụng hoặc chỉ các thư viện không?
Trả lời
Khi bạn đã đến lúc ứng dụng của bạn sẵn sàng phân phối, hãy đóng gói cho các bản phân phối/hệ điều hành ưa thích theo cách đặt mã thư viện của bạn vào gói trang web và tập lệnh thực thi trên đường dẫn hệ thống.
Cho đến lúc đó (ví dụ: cho tất cả công việc phát triển), không thực hiện bất kỳ thao tác nào ở trên: lưu lại những cơn đau đầu lớn và sử dụng zc.buildout hoặc virtualenv để giữ mã phát triển của bạn (và nếu bạn thích, phụ thuộc của nó) bị cô lập từ phần còn lại của hệ thống.
Chương trình do người dùng cuối chạy thường ở đâu đó trong đường dẫn của họ, với hầu hết mã trong thư mục mô-đun, thường nằm trong gói trang web.
Nhiều chương trình python sẽ có một tập lệnh nhỏ nằm trong đường dẫn, sẽ nhập mô-đun và gọi phương thức "chính" để chạy chương trình. Điều này cho phép lập trình viên thực hiện một số kiểm tra trả trước và có thể sửa đổi sys.path nếu cần để tìm mô-đun cần thiết. Điều này cũng có thể tăng tốc thời gian tải trên các chương trình lớn hơn, bởi vì chỉ các tệp được nhập sẽ được chạy từ bytecode.
Chúng tôi làm như thế này.
Hầu hết nội dung chúng tôi tải xuống đều nằm trong gói trang web. Chúng đến từ pypi
hoặc Source Forge hoặc một số nguồn bên ngoài khác; chúng dễ xây dựng lại; chúng được tái sử dụng cao; chúng không thay đổi nhiều.
Nội dung chúng tôi viết nằm ở các vị trí khác (thường dưới /opt
hoặc c:\opt
) VÀ được bao gồm trong PYTHONPATH
.
Không có tuyệt vời lý do để giữ nội dung của chúng tôi ra khỏi site-packages
. Tuy nhiên, lý do yếu ớt của chúng tôi là công cụ của chúng tôi thay đổi rất nhiều. Khá nhiều liên tục. Để cài đặt lại trong các gói trang web mỗi khi chúng tôi nghĩ rằng chúng tôi có một cái gì đó tốt hơn là một chút đau đớn.
Vì chúng tôi đang thử nghiệm trong các thư mục làm việc của chúng tôi hoặc các thư mục thanh toán SVN, môi trường thử nghiệm của chúng tôi tận dụng tối đa PYTHONPATH
.
Việc sử dụng phát triển PYTHONPATH
được chuyển sang sản xuất. Chúng tôi sử dụng setup.py
để cài đặt sản xuất nhưng cài đặt cho một nhà thay thế dưới /opt
và đặt PYTHONPATH
để bao gồm /opt/ourapp-1.1
.
Có vẻ như các bạn thực sự có thể hưởng lợi từ virtualenv + pip (hoặc zc.buildout). –
Chúng tôi không có bất kỳ vấn đề với cấu hình ra - virtualenv không thêm nhiều giá trị. Chúng tôi sử dụng một số loại VM (VMWare có lẽ - ai đó chịu trách nhiệm) để lưu trữ các máy chủ khác nhau để kiểm tra, QA, sản xuất, vv. Sử dụng nhiều máy ảo có vẻ đơn giản hơn virtualenv trên một máy đơn lẻ. –
Tất nhiên, nếu bạn có phần cứng để chạy một máy ảo riêng biệt cho từng dự án bạn làm việc, thì việc ảo hóa mức Python là không cần thiết. Làm thế nào để bạn phát triển, mặc dù? Mỗi nhà phát triển có chạy một cá thể VMWare cục bộ cho từng dự án không? –
Các gói trang web dành cho thư viện, chắc chắn.
Phương pháp kết hợp có thể hoạt động: bạn có thể cài đặt các thư viện theo yêu cầu của ứng dụng của bạn trong gói trang web và sau đó cài đặt mô-đun chính ở nơi khác.
Nếu bạn có thể biến một phần của ứng dụng thành một thư viện và cung cấp một API, thì các gói trang web là một nơi tốt cho nó. Điều này thực sự là có bao nhiêu ứng dụng python làm điều đó.
Nhưng từ quan điểm người dùng hoặc quản trị viên không thực sự là vấn đề. Vấn đề là làm thế nào chúng ta có thể quản lý các công cụ được cài đặt. Sau khi tôi đã cài đặt nó, làm thế nào tôi có thể nâng cấp và gỡ cài đặt nó?
Tôi sử dụng Fedora. Nếu tôi sử dụng python đi kèm với nó, tôi không thích cài đặt mọi thứ vào các gói trang web bên ngoài hệ thống RPM. Trong một số trường hợp tôi đã xây dựng rpm bản thân mình để cài đặt nó.
Nếu tôi xây dựng trăn của riêng mình bên ngoài RPM, sau đó tôi tự nhiên muốn sử dụng cơ chế của python để quản lý nó.
Cách thứ ba là sử dụng một cái gì đó như easy_install để cài đặt những thứ như ví dụ như người dùng vào thư mục chính.
Vì vậy
- Cho phép đóng gói để phân phối.
- Cho phép chọn trăn để sử dụng.
- Cho phép sử dụng python được cài đặt theo phân phối mà bạn không có quyền đối với gói trang web.
- Cho phép sử dụng python được cài đặt bên ngoài phân phối nơi bạn có thể sử dụng gói trang web.
- 1. Không gói phải phù hợp với các thư mục con các tập tin java là trong?
- 2. có nghĩa là chỉ dành cho các dịch vụ web HOẶC cho cả dịch vụ web VÀ các trang web?
- 3. Java có phù hợp với các ứng dụng "Web 2.0" không?
- 4. Thư viện Java (hoặc bất kỳ lang nào) để hiển thị các trang web ngoại tuyến?
- 5. Có công cụ dòng lệnh hoặc thư viện nào để hiển thị các trang web sử dụng JavaScript không?
- 6. Khung công tác PHP nào phù hợp cho các ứng dụng chỉ dành cho dịch vụ web?
- 7. Thư viện để lưu các trang web trên iPhone?
- 8. Có thư viện hữu ích nào cho các ứng dụng .NET Console không?
- 9. Tạo thư mục gói trang web phụ (và tải các gói từ tệp .pth trong đó)
- 10. Bạn có kiểm tra sức khỏe trong ứng dụng web hoặc trang web của mình không?
- 11. Có các tiêu chuẩn đặt tên lớp CSS cho các ứng dụng web không?
- 12. Có thư viện các thành phần iPhone có thể tái sử dụng trên web không?
- 13. Không thể xóa lọ khỏi Thư viện ứng dụng web
- 14. R: kết hợp các vị trí thư viện với hầu hết các gói cập nhật
- 15. Thư viện .NET hoặc ứng dụng asp.net cho Amazon S3
- 16. Tôi có thể sử dụng các thư viện từ FFmpeg trong một ứng dụng Android không?
- 17. Tôi có nên sử dụng StringBuilder hoặc StringBuffer cho các ứng dụng web không?
- 18. Bcrypt có khả thi cho các trang web lớn không?
- 19. JS gói nhỏ gọn và các thư viện bên ngoài
- 20. Cách tạo trang web phù hợp?
- 21. Tôi có nên gộp các thư viện C bằng ứng dụng Python của mình không?
- 22. Kết hợp các thư viện tĩnh
- 23. Mọi thư viện biểu đồ hoặc biểu đồ web có hỗ trợ cho các thanh lỗi không?
- 24. LGPL có thể áp dụng cho các ứng dụng không?
- 25. Viết hoa phù hợp cho các tiêu đề bằng Python
- 26. Thư viện trăn phù hợp nhất cho Github API v3
- 27. Các ứng dụng/thư viện Java mã nguồn mở lớn
- 28. Bạn có thể sử dụng tập tin Settings.Settings cho các trang web ASP.Net không?
- 29. Thư mục App_Start trong ASP 4.5 chỉ trong các Dự án Ứng dụng Web?
- 30. Kết hợp các thư viện tĩnh
Câu trả lời tuyệt vời tất cả. Cảm ơn. Hầu hết các câu trả lời là một biến thể về điều này nhưng tôi tin rằng đoạn đầu tiên của câu trả lời này trả lời câu hỏi một cách chính xác nhất. Đối với ứng dụng này các mã đã được phân phối vì vậy nó có lẽ là thời gian qua để thử zc.buildout hoặc virtualenv nhưng tôi sẽ giữ chúng trong tâm trí trong tương lai. – AaronS