2015-02-24 21 views
15

Tôi đã tạo một gói trong PyPI có tên là virtdc. Tôi đã thực hiện một số thay đổi và tải lên 2 phiên bản khác nhau 0.1.0 và 0.1.1. Bây giờ tôi đã xóa phiên bản 0.1.1 thông qua giao diện web PyPI và thử tải lên lại với cùng số phiên bản. Nó cho tôi lỗi như sauLỗi tải lên PyPI 400

... 
Writing virtdc-0.1.2/setup.cfg 
Creating tar archive 
removing 'virtdc-0.1.2' (and everything under it) 
running register 
Registering virtdc to http://pypi.python.org/pypi 
Server response (200): OK 
running upload 
Submitting dist/virtdc-0.1.2.tar.gz to http://pypi.python.org/pypi 
Upload failed (400): This filename has previously been used, you should use a different version. 

Và PyPI không cho phép nhiều hơn 4 phiên bản cho gói. Vì vậy, chúng tôi phải xóa một số phiên bản và tải lên lại.

Ngay cả sau khi lỗi tải lên này, mô tả nội dung đầu tiên có sẵn. Nhưng liên kết tải xuống không khả dụng. Bạn có thể tìm thấy gói của tôi here

Có ai có thể giúp tôi về điều này không? Cảm ơn

+0

Xem http://comments.gmane.org/gmane.comp.python.distutils.devel/22739 "Tôi đã đẩy các thay đổi vào PyPI nơi không còn có thể sử dụng lại tên tệp và cố gắng thực hiện nó sẽ đưa ra lỗi 400" –

+0

Cuộc thảo luận tương tự (tương tự hoặc) về [trình theo dõi vấn đề đóng gói] (https://github.com/pypa/packaging-problems/issues/74) trên GitHub. - TL; DR Không sửa lỗi cho hành vi PyPI này cho đến ngày hôm nay. – Peterino

Trả lời

17

tôi đã cùng một vấn đề, và có vẻ như không có sửa chữa thẳng:

http://sourceforge.net/p/pypi/support-requests/468

Tuy nhiên, nếu bạn muốn tải lên một bản phân phối nguồn, có một cách giải quyết mà không phải là quá xấu xí. Bạn có thể tạo kho lưu trữ "zip" thay vì tệp lưu trữ "tar.gz". Bạn có thể kiểm soát điều này, ví dụ: qua

python setup.py sdist --formats=zip 

Bằng cách này, bạn có được tên tệp khác. Sau đó, bạn có thể thêm các lệnh upload trực tiếp

python setup.py sdist --formats=zip upload 

Hoặc bạn có thể sử dụng twine tải lên sau khi tòa nhà:

twine upload dist/* 
+3

Tôi cũng thấy đề xuất phát hành phiên bản '.post1'. Đó là phiên bản hậu phát hành tuân thủ PEP440 cho các bản sửa lỗi rất nhỏ (như khắc phục vấn đề bạn đang nói đến). –

+0

như được chỉ ra bởi @Pryce http://stackoverflow.com/a/32443905/1816995 điều này không còn hoạt động. – mpacer

4

Câu trả lời được chấp nhận không còn hoạt động; PyPi bây giờ kiểm tra tên tệp gốc, bỏ qua các phần mở rộng, để xác định xem đó có phải là một bản sao hay không. Tải lên định dạng zip cho cùng lỗi với gztar. Phiên bản .post1 cho phép bạn tạo bản phát hành mới> = phiên bản cũ, nhưng đối với những thứ như tải lên nội dung sai hoặc đóng gói tệp không nên có trong bản phát hành, bạn vẫn bị mắc kẹt với thay đổi phiên bản.

Để giải quyết vấn đề này, bạn có thể truy cập trang web của PyPi và xóa thủ công bản phát hành (không phải tệp phát hành) đã tải lên bị hỏng. Nó sẽ cảnh báo bạn rằng điều này không thể hoàn tác được, vì vậy hãy đảm bảo rằng bạn đang xóa bản phát hành và đặc biệt là bản phát hành bạn định xóa. Khi đã xóa, bạn có thể tải lên bản phân phối của mình như thể nó chưa từng tồn tại trước đây và phản hồi 400 tệp trùng lặp sẽ không xảy ra. Rõ ràng là không lạm dụng điều này và thay đổi mã dưới mũi của người dân, nhưng nếu bạn tải lên nội dung sai, đây là một công việc xung quanh chính sách của PyPi.

+2

Xóa bản phát hành không còn hoạt động nữa. Ngay cả việc xóa toàn bộ dự án và thử lại không hoạt động. Xem: http://comments.gmane.org/gmane.comp.python.distutils.devel/22739 –

+0

Có. Xóa bản phát hành không còn hoạt động nữa. – akozin

6

này đã làm việc cho tôi:

  1. Xóa build, dist, và <package name>.egg-info thư mục trong thư mục gốc của bạn.
  2. Thay đổi số phiên bản trong tệp setup.py của bạn.
  3. Tạo lại phân phối. ví dụ: python setup.py sdist bdist_wheel
  4. Tải lên lại phân phối. ví dụ: twine upload dist/*
  5. tận hưởng! :-)
Các vấn đề liên quan