Tôi là một học giả chứ không phải là một lập trình viên và tôi có nhiều năm kinh nghiệm viết các chương trình Python để sử dụng cho riêng mình, để hỗ trợ nghiên cứu của tôi. Dự án mới nhất của tôi có thể hữu ích cho nhiều người khác cũng như tôi và tôi đang nghĩ đến việc phát hành nó như một thư viện Python nguồn mở.
Tuy nhiên, dường như có khá nhiều trở ngại để vượt qua từ một dự án cá nhân hoạt động đến một thư viện có thể được cài đặt và sử dụng không đau đớn bởi những người khác. Câu hỏi này là về các bước đầu tiên tôi nên thực hiện để bắt đầu làm việc với một bản phát hành công khai.
Hiện tại, tôi có một kho git duy nhất chứa mã của tôi sử dụng thư viện cũng như chính thư viện và tôi sử dụng git làm nút hoàn tác khẩn cấp trong trường hợp có bất kỳ lỗi nào. Tất cả điều này hoạt động tốt cho một người dùng nhưng rõ ràng là không phù hợp nếu tôi muốn phát hành nó. Nơi tôi muốn kết thúc là thư viện của tôi nằm trong một kho lưu trữ riêng và có thể được cài đặt bởi những người khác bằng cách sử dụng pip
và có API ổn định.
Học cách sử dụng setuptools, v.v. có lẽ không quá khó một khi tôi muốn xuất bản nó - vấn đề của tôi là phải biết tôi nên làm việc như thế nào để đạt được điểm đó.
Vì vậy, câu hỏi của tôi là, những bước đầu tiên người ta nên làm để bắt đầu chuẩn bị một dự án thư viện Python cho tiêu dùng công cộng là gì? Làm thế nào tôi nên tổ chức lại cấu trúc thư mục của mình, kho git, v.v. để bắt đầu làm việc với việc phát hành thư viện công khai?
Tổng quát hơn, sẽ rất hữu ích nếu có những tài nguyên được biết là hữu ích khi thử lần đầu tiên. Con trỏ hướng tới các thực tiễn tốt nhất và sai lầm cần tránh, vv, cũng sẽ rất hữu ích.
Một số làm rõ: các câu trả lời hiện tại đang giải quyết một câu hỏi dọc theo dòng "làm thế nào tôi có thể làm cho thư viện Python của mình trở thành một câu hỏi hay cho người khác sử dụng?" Điều này rất hữu ích, nhưng nó khác với câu hỏi tôi dự định hỏi.
Tôi hiện đang bắt đầu một hành trình dài hướng tới việc phát hành dự án của mình. Cốt lõi của việc triển khai của tôi hoạt động (và hoạt động thực sự tốt), nhưng tôi cảm thấy bị choáng ngợp bởi số lượng công việc trước mắt và tôi đang tìm hướng dẫn về cách điều hướng quá trình. Ví dụ:
Mã thư viện của tôi hiện được kết hợp với mã tên miền cụ thể của riêng tôi sử dụng nó. Nó sống trong một thư mục con và chia sẻ cùng một kho git. Cuối cùng, nó sẽ cần được tạo thành một thư viện độc lập và đưa vào kho lưu trữ của riêng nó, nhưng tôi cứ trì hoãn điều này bởi vì tôi không biết làm thế nào để làm điều đó. (Không phải cách cài đặt thư viện trong 'chế độ phát triển' để tôi vẫn có thể chỉnh sửa thư viện, cũng như cách giữ đồng bộ hai git repos.)
Tài liệu của tôi rất ngắn gọn, vì tôi biết rằng cuối cùng tôi sẽ phải sử dụng Nhân sư hoặc một số công cụ khác. Nhưng những công cụ này dường như không đơn giản để học, vì vậy đây trở thành một tiểu dự án lớn và tôi tiếp tục thực hiện nó.
Tại một số điểm tôi cần học cách sử dụng setuptools hoặc một số công cụ khác để đóng gói và theo dõi các phụ thuộc, khá phức tạp. Tôi không chắc liệu tôi có cần phải làm điều này ngay bây giờ hay không và tài liệu này là một mê cung tuyệt đối cho một người dùng mới, vì vậy tôi tiếp tục quyết định thực hiện nó sau.
Tôi chưa bao giờ phải thực hiện thử nghiệm có hệ thống, nhưng tôi chắc chắn sẽ làm cho dự án này, vì vậy tôi phải (i) tìm hiểu đủ về thử nghiệm để biết phương pháp nào phù hợp với dự án của mình; (ii) tìm hiểu những công cụ có sẵn cho phương pháp đã chọn của tôi; (iii) học cách sử dụng công cụ đã chọn của tôi; (iv) triển khai các bộ thử nghiệm, vv cho dự án của tôi. Đây là một dự án trong chính nó.
Cũng có thể có những thứ khác tôi phải làm là tốt. Ví dụ, jonrsharpe đã đăng một liên kết hữu ích có đề cập đến git-Flow, tox, TravisCI, virtualenv và CookieCutter, không ai trong số chúng tôi nghe thấy trước đây. (Bài đăng là từ năm 2013, vì vậy tôi cũng phải thực hiện một số công việc để tìm hiểu xem hiện tại vẫn còn bao nhiêu.)
Khi bạn kết hợp tất cả lại với nhau, đó là một khối lượng công việc khổng lồ, nhưng tôi chắc chắn rằng tôi có thể hoàn thành mọi việc nếu tôi tiếp tục thực hiện nó và tôi không vội vàng. Vấn đề của tôi là biết làm thế nào để chia nó thành các bước có thể quản lý có thể được thực hiện cùng một lúc.
Nói cách khác, tôi đang hỏi đâu là những bước cụ thể quan trọng nhất tôi có thể thực hiện bây giờ, để đạt được một sản phẩm đáng tin cậy cuối cùng. Nếu tôi có một ngày cuối tuần rảnh rỗi, tôi nên tập trung vào những điều này? Mà (nếu có) có thể được thực hiện tách biệt với những người khác, để tôi ít nhất có thể hoàn thành một bước mà không cần phải làm toàn bộ? Cách hiệu quả nhất để học những điều này là gì để tôi vẫn có thời gian tập trung vào chính dự án? (Phải ghi nhớ rằng tất cả những điều này về cơ bản là một dự án sở thích, chứ không phải việc của tôi.) Có bất kỳ của nó mà tôi không thực sự cần phải làm , do đó tiết kiệm cho mình một lượng lớn thời gian và công sức?
Tất cả các câu trả lời đều được đánh giá cao, nhưng tôi đặc biệt hoan nghênh các câu trả lời tập trung vào các khía cạnh quản lý dự án này, với tham chiếu cụ thể để phát triển Python hiện đại.