2012-06-14 37 views
22

Câu hỏi tương tự với How can I make setuptools install a package that's not on PyPI? nhưng không giống nhau.Làm cách nào để tôi có thể cài đặt gói cài đặt từ một nguồn khác cũng có sẵn trên pypi với cùng số phiên bản?

Vì tôi muốn sử dụng phiên bản chia đôi của một số gói, các công cụ thiết lập bỏ qua liên kết phụ thuộc (vì nó có cùng số phiên bản).

Có cách nào để buộc sử dụng liên kết từ dependency_links không? Hoặc là cách duy nhất để thay đổi số phiên bản trong repo được chia nhỏ?

requires = [ 
    ... 
    'pyScss==1.1.3' 
    ... 

dependencies = [ 
    'https://github.com/nadavshatz/pyScss/zipball/master#egg=pyScss-1.1.3' 
] 

Cập nhật

Weird, dường như nó hoạt động nếu gói này là người duy nhất trong danh sách cần thiết, đó không phải được cài đặt chưa. Nếu có một gói bị thiếu, nó sẽ tải xuống từ pypi.

+0

@IlyaBaryshev, xin lỗi nhưng tôi chỉ sử dụng giải pháp thay thế mà tôi mô tả trong bản cập nhật. cài đặt/cập nhật tất cả các gói, sau đó gỡ cài đặt gói cụ thể này và sau đó là gói bị thiếu duy nhất - trong trường hợp này, nó sẽ lấy liên kết từ các phụ thuộc – roberkules

+1

Tôi đang tạo gói, vì vậy nó không phải là một tùy chọn. Tôi đang suy nghĩ về vendoring tất cả các phụ thuộc bên trong gói của tôi, có vẻ như là một lựa chọn duy nhất xem xét hành vi setuptools buggy. –

+0

Đây có phải là giải pháp cho vấn đề của bạn không: http://stackoverflow.com/a/17442663/368102? – Heyl1

Trả lời

9

Tôi tin rằng bạn chỉ có thể sử dụng dependency_links như mô tả trong câu hỏi đó:

from setuptools import setup 

setup(name = 'mypkg', 
    version = '0.0.1', 
    description = 'Foo', 
    author = 'bar', 
    author_email = '[email protected]', 
     install_requires = ['pyScss==1.1.3'], 
     dependency_links = [ 
     'https://github.com/nadavshatz/pyScss/zipball/master#egg=pyScss-1.1.3' 
     ] 
    ) 

Tested sử dụng python setup.py develop

Có thể bạn muốn đổi tên trứng để nhấn mạnh đó là một ngã ba http://www.python.org/dev/peps/pep-0386/

Bên ngoài setup.py bạn có thể thực thi điều này cục bộ bằng cách sử dụng requirements.txtpip. Trong khi điều này sẽ không làm cho gói của bạn phụ thuộc vào ngã ba, bạn có thể dễ dàng tài liệu đó như là cách để cài đặt.

$ cat requirements.txt 
https://github.com/nadavshatz/pyScss/zipball/master#egg=pyScss-1.1.3 
$ pip install -r requirements.txt 
+0

thực sự đó là những gì tôi đang làm ... trong cuộc gọi 'setup' tôi chuyển' install_requires = require' và 'dependency_links = dependencies'. về cơ bản là mã giống như của bạn. – roberkules

6

Tôi đã kết thúc một việc rất giống với câu trả lời trong stackoverflow.com/a/17442663/368102.

Tôi cần gói requests-file github có tên xung đột với gói requests-file khác trong PyPi. Cả hai đều có phiên bản 1.0 và phiên bản PyPi có một số phiên bản cao hơn.

Cách giải quyết trong ias_tools/setup.py của tôi trông như thế này:

setup(
    ... 
    install_requires=[ 
     'requests-file<=99.99', 
    ], 
    dependency_links=[ 
     'https://github.com/jvantuyl/requests-file/archive/b0a7b34af6e287e07a96bc7e89bac3bc855323ae.zip#egg=requests-file-99.99' 
    ] 
) 

Trong trường hợp của tôi, tôi đang sử dụng pip vì vậy tôi cũng đã phải sử dụng --process-dependency-links:

% pip install --process-dependency-links ./ias_tools 
You are using pip version 6.0.6, however version 6.1.1 is available. 
You should consider upgrading via the 'pip install --upgrade pip' command. 
Processing ./ias_tools 
    DEPRECATION: Dependency Links processing has been deprecated and will be removed in a future release. 
Collecting requests-file<=99.99 (from ias-tools==0.1) 
    Downloading https://github.com/jvantuyl/requests-file/archive/b0a7b34af6e287e07a96bc7e89bac3bc855323ae.zip 
Requirement already satisfied (use --upgrade to upgrade): requests>=1.1.0 in ./venv/lib/python2.7/site-packages (from requests-file<=99.99->ias-tools==0.1) 
Installing collected packages: ias-tools, requests-file 
    Running setup.py install for ias-tools 
    Running setup.py install for requests-file 
Successfully installed ias-tools-0.1 requests-file-1.0 

Tôi không quá lo lắng về thông báo không dùng nữa, như a pull request was submitted to pip để ngừng sử dụng tính năng không dùng nữa (sau discussion about it).

+0

Lệnh xây dựng của tôi là 'pip install --upgrade -e.', và tôi cũng cần thêm' --process-dependency-links'. Cảm ơn bạn đã bao gồm thông tin đó. –

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