2013-06-28 30 views
9

Tôi đã cố gắng để cài đặt một gói phần mềm với các thiết lập sau đây cấu hình:setuptools không thể sử dụng liên kết từ dependency_links

setup(
    packages=find_packages(), 
    include_package_data=True, 
    install_requires=[ 
     'Django==1.5.1', 
     'xhtml2pdf', 
    ], 
    dependency_links=[ 
     'https://github.com/chrisglass/xhtml2pdf/zipball/28d12fcaafc4c47b13f1f6f42c2bfb73f90cc947#egg=xhtml2pdf', 
    ], 
) 

Tuy nhiên nó cài đặt gói XHTML2PDF từ PyPi, thay vì sử dụng các liên kết cụ thể. Theo đầu ra (tôi chạy cài đặt bằng cách sử dụng pip install -vvv package.tar.gz), nó có thể không phân tích phiên bản từ liên kết (tại số // 1 trong mã) hoặc tôi đã không chỉ định tên dự án chính xác (tại // 2 trong mã):

Downloading/unpacking xhtml2pdf (from mypackage==1.3) 
    Getting page https://pypi.python.org/simple/xhtml2pdf/ 
    URLs to search for versions for xhtml2pdf (from mypackage==1.3): 
    * https://pypi.python.org/simple/xhtml2pdf/ 
    * https://github.com/chrisglass/xhtml2pdf/zipball/28d12fcaafc4c47b13f1f6f42c2bfb73f90cc947#egg=xhtml2pdf 
    Getting page https://github.com/chrisglass/xhtml2pdf/zipball/28d12fcaafc4c47b13f1f6f42c2bfb73f90cc947 
    Analyzing links from page https://pypi.python.org/simple/xhtml2pdf/ 
    Found link https://pypi.python.org/packages/source/x/xhtml2pdf/xhtml2pdf-0.0.1.tar.gz#md5=9f83a2bcb67858aca9e058761f3bea7b (from https://pypi.python.org/simple/xhtml2pdf/), version: 0.0.1 
    Found link https://pypi.python.org/packages/source/x/xhtml2pdf/xhtml2pdf-0.0.2.tar.gz#md5=d640ccb9470942fd2e6d3ae740c27dc1 (from https://pypi.python.org/simple/xhtml2pdf/), version: 0.0.2 
    Found link https://pypi.python.org/packages/source/x/xhtml2pdf/xhtml2pdf-0.0.1.zip#md5=4ad41c845735ae14da99085311d84c00 (from https://pypi.python.org/simple/xhtml2pdf/), version: 0.0.1 
    Found link https://pypi.python.org/packages/source/x/xhtml2pdf/xhtml2pdf-0.0.4.zip#md5=5f035cd6532bef99b7d35054caaa6ef7 (from https://pypi.python.org/simple/xhtml2pdf/), version: 0.0.4 
    Found link https://pypi.python.org/packages/source/x/xhtml2pdf/xhtml2pdf-0.0.3.zip#md5=32599c74f26f57ebd002765741ec64f7 (from https://pypi.python.org/simple/xhtml2pdf/), version: 0.0.3 
    Found link https://pypi.python.org/packages/source/x/xhtml2pdf/xhtml2pdf-0.0.2.zip#md5=4047a8234eb6b77591d526dcb1f60161 (from https://pypi.python.org/simple/xhtml2pdf/), version: 0.0.2 
    Found link https://pypi.python.org/packages/source/x/xhtml2pdf/xhtml2pdf-0.0.3.tar.gz#md5=13b0d6059b72c994473fddfa7a528451 (from https://pypi.python.org/simple/xhtml2pdf/), version: 0.0.3 
    Found link https://pypi.python.org/packages/source/x/xhtml2pdf/xhtml2pdf-0.0.5.zip#md5=8db99aae8536436a2b7b0b3987197b99 (from https://pypi.python.org/simple/xhtml2pdf/), version: 0.0.5 
    Found link https://pypi.python.org/packages/source/x/xhtml2pdf/xhtml2pdf-0.0.5.tar.gz#md5=1ef268b40c11bf966f7c6c5504299e3e (from https://pypi.python.org/simple/xhtml2pdf/), version: 0.0.5 
    Found link https://pypi.python.org/packages/source/x/xhtml2pdf/xhtml2pdf-0.0.4.tar.gz#md5=36b015a4e2918460711cbc5eebe026ce (from https://pypi.python.org/simple/xhtml2pdf/), version: 0.0.4 
    Analyzing links from page https://codeload.github.com/chrisglass/xhtml2pdf/legacy.zip/28d12fcaafc4c47b13f1f6f42c2bfb73f90cc947 
    Could not parse version from link: https://github.com/chrisglass/xhtml2pdf/zipball/28d12fcaafc4c47b13f1f6f42c2bfb73f90cc947#egg=xhtml2pdf // 1 
    Skipping link https://github.com/chrisglass/xhtml2pdf/zipball/28d12fcaafc4c47b13f1f6f42c2bfb73f90cc947#egg=xhtml2pdf; wrong project name (not xhtml2pdf) // 2 
    Using version 0.0.5 (newest of versions: 0.0.5, 0.0.5, 0.0.4, 0.0.4, 0.0.3, 0.0.3, 0.0.2, 0.0.2, 0.0.1, 0.0.1) 
    Downloading xhtml2pdf-0.0.5.zip (118kB): 
    Downloading from URL https://pypi.python.org/packages/source/x/xhtml2pdf/xhtml2pdf-0.0.5.zip#md5=8db99aae8536436a2b7b0b3987197b99 (from https://pypi.python.org/simple/xhtml2pdf/) 
...Downloading xhtml2pdf-0.0.5.zip (118kB): 118kB downloaded 

Nếu tôi thêm số phiên bản vào gói (xhtml2pdf-0.0.5) trong cả hai install_requiresdependency_links, hãy tìm liên kết Git và không phàn nàn về chúng nhưng vẫn cài đặt từ PyPi.

Tôi đã tìm kiếm câu trả lời trong một thời gian nhưng chưa thể tìm ra giải pháp. Tôi cần phiên bản Git, bởi vì nó đã sửa chữa phiên bản PyPi chưa có.

+0

bản sao có thể có của [Làm cách nào để tôi có thể thiết lập công cụ cài đặt gói từ một nguồn khác cũng có sẵn trên pypi với cùng số phiên bản?] (Http://stackoverflow.com/questions/11032125/how-can-i-make -setuptools-install-a-package-from-another-source-that-cũng-avai) –

+0

Vâng, đó là bản sao của [Làm cách nào để tôi có thể thiết lập các công cụ cài đặt một gói từ một nguồn khác cũng có sẵn trên pypi với cùng một phiên bản number?] (http://stackoverflow.com/questions/11032125/how-can-i-make-setuptools-install-a-package-from-another-source-thats-also-avai), mà tôi đã công bố trong câu trả lời tôi đưa ra cho câu hỏi của riêng tôi. – Heyl1

Trả lời

15

Ok, vì vậy tôi đã giải quyết (hoặc bị tấn công, tùy thuộc vào cách bạn nhìn vào nó) câu hỏi của riêng tôi.

Có hai vấn đề với mã.

Vấn đề đầu tiên là liên kết không chính xác. Mặc dù tôi đã nhìn thấy nó được định dạng như thế này ở nơi khác, nó sẽ không làm việc cho tôi (cho dù sử dụng setuptools mkvirtualenv mypackage hoặc phân phối mkvirtualenv --distribute mypackage). Tôi thấy nó cần mở rộng zip ở cuối và phát hiện ra trên Github bạn có thể tải về một cam kết cụ thể bằng cách sử dụng định dạng https://github.com/user/project/archive/commit.zip.

Sau đó, tôi vẫn gặp sự cố, mặc dù bây giờ nó sẽ nhận ra liên kết, nó vẫn sẽ chọn phiên bản PyPi trên phiên bản Github. Lý do cho điều này là các cam kết cuối cùng (sau khi phát hành cho PyPi) trên Github vẫn có số phiên bản giống như phiên bản mới nhất trên PyPi. Vì vậy, nó quay ra câu hỏi này thực sự là một bản sao của How can I make setuptools install a package from another source that's also available on pypi with the same version number?. Để cố gắng giải quyết nó tôi đã cố gắng cài đặt sau đây trong setup.py (một số trong số này đã được đề cập trong câu hỏi Stackoverflow khác như làm việc) của tôi:

install_requires=[], 
dependency_links=['https://github.com/chrisglass/xhtml2pdf/archive/28d12fcaafc4c47b13f1f6f42c2bfb73f90cc947.zip',], 

này không cài đặt xhtml2pdf ở tất cả.

install_requires=['xhtml2pdf',], 
dependency_links=['https://github.com/chrisglass/xhtml2pdf/archive/28d12fcaafc4c47b13f1f6f42c2bfb73f90cc947.zip#egg=xhtml2pdf',], 

Cài đặt phiên bản PyPi mới nhất (0.0.5).

install_requires=['xhtml2pdf==0.0.5',], 
dependency_links=['https://github.com/chrisglass/xhtml2pdf/archive/28d12fcaafc4c47b13f1f6f42c2bfb73f90cc947.zip#egg=xhtml2pdf-0.0.5',], 

Cài đặt phiên bản 0.0.5 này trong PyPi. Nó thực sự có ý nghĩa rằng setuptools và phân phối sẽ chọn phiên bản PyPi trên phiên bản Github nếu số phiên bản là như nhau, bởi vì phiên bản PyPi nên ổn định hơn.

install_requires=['xhtml2pdf==0.0.6',], 
dependency_links=['https://github.com/chrisglass/xhtml2pdf/archive/28d12fcaafc4c47b13f1f6f42c2bfb73f90cc947.zip#egg=xhtml2pdf-0.0.6',], 

này tải về các gói từ Github (vì phiên bản 0.0.6 không tồn tại trên PyPi), tuy nhiên đến thời gian cài đặt nó phàn nàn rằng các phiên bản không phù hợp, bởi vì các phiên bản được quy định trong gói là thực sự 0.0.5.

install_requires=['xhtml2pdf<=0.0.6',], 
dependency_links=['https://github.com/chrisglass/xhtml2pdf/archive/28d12fcaafc4c47b13f1f6f42c2bfb73f90cc947.zip#egg=xhtml2pdf-0.0.6',], 

Điều này cuối cùng cũng hiệu quả. Setuptools (và phân phối) nhận ra rằng phiên bản Github phải mới hơn vì đó là những gì tôi đã nói. Và đến cài đặt thời gian nó không phàn nàn về thực tế là phiên bản thực tế là 0,0.5 bởi vì nó vẫn đáp ứng các yêu cầu.

Bạn có thể xem xét vấn đề này một chút. Tôi không hoàn toàn hài lòng với giải pháp này. Nhưng tôi cũng có thời hạn và nó hoạt động. Một lời cảnh báo: Tôi sẽ bắt đầu gặp vấn đề khi phiên bản 0.0.6 thực sự được phát hành. Tôi muốn pin phụ thuộc của tôi đúng cách, vì vậy tôi không chạy vào các vấn đề trong tương lai khi tôi đang cài đặt lại, và đây không phải là một pin thích hợp. Tuy nhiên, tôi cho rằng bạn có thể tìm hiểu số phiên bản bằng cách sử dụng tài liệu này: https://pythonhosted.org/setuptools/setuptools.html#specifying-your-project-s-version. Chìa khóa là phiên bản nên (giả vờ) cao hơn 0.0.5, nhưng cũng là một số (với các ký tự tùy chọn) mà bạn sẽ không mong đợi hiển thị dưới dạng bản phát hành trong PyPi trong tương lai (và rõ ràng thấp hơn số phát hành tiếp theo nhiều khả năng sẽ là (0.0.6 trong trường hợp của tôi)).

Tôi hy vọng điều này hữu ích cho bất kỳ ai khác :).

Lưu ý: Tôi sử dụng tệp requirements.txt được xử lý bằng tệp setup.py để trích xuất các yêu cầu. Khi bạn sử dụng https://github.com/chrisglass/xhtml2pdf/archive/28d12fcaafc4c47b13f1f6f42c2bfb73f90cc947.zip#egg=xhtml2pdf-0.0.6 trong tệp requirements.txt của mình, nó cũng sẽ vẫn cài đặt tốt bằng cách sử dụng pip install -r requirements.txt.

+0

Điều này bị ràng buộc để phá vỡ mặc dù khi ngược dòng di chuyển đến phiên bản tiếp theo tăng là tốt? –

+2

Có, tôi đã đề cập rằng trong đoạn cuối cùng nhưng có hai lời cảnh cáo: "Một lời cảnh cáo: Tôi sẽ bắt đầu gặp sự cố khi phiên bản 0.0.6 được phát hành thực sự. vì vậy tôi không gặp vấn đề gì trong tương lai khi tôi cài đặt lại, và đây không phải là một pin thích hợp. ... " – Heyl1