2013-02-06 32 views
6

Tôi đang viết ứng dụng python phụ thuộc vào một ứng dụng khác được lưu trữ trên kho lưu trữ github (không bao giờ trong pypi) vì lý do phát triển.Nhận pip để làm việc với kho git và github

Hãy gọi họ là:

  • App được viết: AppA
  • App trong github: AppB

Trong App A, setup.py giống như:

# coding=utf-8 
import sys 
try: 
    from setuptools import setup, find_packages 
except ImportError: 
    import distribute_setup 
    distribute_setup.use_setuptools() 
    from setuptools import setup, find_packages 

setup(
    ... 
    install_requires=[ 
     # other requirements that install correctly 
     'app_b==0.1.1' 
    ], 
    dependency_links=[ 
     'git+https://github.com/user/app_b.g[email protected]#egg=app_b-0.1.1' 
    ] 
) 

Bây giờ AppA đang được xây dựng bởi Jenkins CI với mỗi lần đẩy và tôi gặp lỗi vì lỗi tiếp theo bị ném:

error: Download error for git+https://github.com/user/[email protected]: unknown url type: git+https 

Điều thú vị là điều này chỉ xảy ra trong Jenkins, nó hoạt động hoàn hảo trên máy tính của tôi. Tôi đã thử cả hai url SSH khác mà github cung cấp và thậm chí không được xem xét để tải xuống.

Bây giờ, AppA được bao gồm trong các tập tin yêu cầu của một dự án cũng đang được xây dựng bởi Jenkins, vì vậy cài đặt phụ thuộc bằng tay qua pip install AppApip install AppB không là một lựa chọn, các phụ thuộc sẽ được tự động cài đặt bởi được bao gồm trong requirements.txt.

Có cách nào để tạo pip và git với các url github hoạt động cùng nhau không?

Mọi trợ giúp sẽ được đánh giá cao :)

Cảm ơn bạn trước!

+0

Bạn có chắc Jenkins sử dụng pip? Nếu có, đó có phải là phiên bản hỗ trợ tính năng này không? – wRAR

+0

@Gerard bạn sử dụng phiên bản nào của pip? 'pip --version' sẽ cung cấp cho bạn thông tin đó. Tắt cuff, có vẻ như trước 0.8.2, không hỗ trợ lược đồ https. – jszakmeister

Trả lời

12

Sự cố không phải là với pip, là với setuptools. Trách nhiệm đối với cuộc gọi setup() là gói setuptools (các công cụ thiết lập hoặc phân phối dự án).

Không setuptools hoặc distribute hiểu loại url đó, họ hiểu tệp tarballs/zip.

Thử trỏ tới url tải xuống của Github - thường là tệp zip.

nhập dependency_links của bạn có lẽ sẽ giống như sau:

dependency_links=[ 
    'https://github.com/user/app_b/archive/0.1.1.zip#egg=app_b-0.1.1' 
] 

Để biết thêm thông tin hãy nhìn vào http://peak.telecommunity.com/DevCenter/setuptools#dependencies-that-aren-t-in-pypi

+0

Ngoài câu trả lời này, trong trường hợp của tôi gói không bao giờ có thể được cài đặt nếu gói đó trong 'require' ở dạng' package == version', nhưng nó hoạt động bằng 'package'; nghĩa là, chỉ tên gói không có phiên bản – Gerard

2

Từ pip documentation -

pip currently supports cloning over git, git+http and git+ssh: 

git+git://git.myproject.org/MyProject#egg=MyProject 
git+http://git.myproject.org/MyProject#egg=MyProject 
git+ssh://git.myproject.org/MyProject#egg=MyProject 

Hãy thử thay thế git+https với git+git.

+0

Rất tiếc, tính năng này không hoạt động. Nó hoạt động tại địa phương nhưng không phải trong Jenkins: (Tôi đang cố gắng để tìm ra một cái gì đó. Thanks anyway – Gerard

+0

'git + https' nên được hỗ trợ, mặc dù tài liệu.Ít nhất là theo [nguồn] (https://github.com/pypa/pip/blob/develop/pip/vcs/git.py#L17). Điều đó xuất hiện tất cả các con đường trở lại trong pip 0.8.2. – jszakmeister

+0

Tôi chỉ đang nói lỗi đang hiển thị - 'loại url không xác định: git + https'. Phải là một số phiên bản cũ của pip. –

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