2017-08-21 20 views
6

Tôi đang cố cài đặt danh sách các gói bằng pip.Cài đặt các gói từ danh sách bằng pip

Mã mà tôi sử dụng là:

import pip 

def install(package_name): 
     try: 
      pip.main(['install', package_name]) 
     except: 
      print("Unable to install " + package_name) 

Mã này hoạt động tốt và nếu một gói không có sẵn, nó mang lại một lỗi:

No matching distributions found

Tuy nhiên, những gì tôi đang cố gắng làm nếu cài đặt không thành công (ví dụ: tên gói không hợp lệ), tôi muốn in gói không thành công.

Điều gì có thể được thực hiện cho điều đó?

Bất kỳ trợ giúp nào sẽ được đánh giá cao, cảm ơn bạn.

+0

https://github.com/pypa/pip/blob/21be153044a7aa245e12ce3f86793e9b17201519/pip/index.py#L525 – Juggernaut

Trả lời

5

Hãy thử kiểm tra giá trị trả về khác không, cho biết lỗi xảy ra khi cài đặt. Không phải tất cả các lỗi đều kích hoạt ngoại lệ.

import pip 

def install(package_name): 
     try: 
      pipcode = pip.main(['install', package_name]) 
      if pipcode != 0: 
       print("Unable to install " + package_name + " ; pipcode %d" % pipcode) 
     except: 
      print("Unable to install " + package_name) 
2

Bạn có thể kiểm tra giá trị của gói để xác minh xem không tìm thấy phân phối phù hợp nào. Thông thường các gói sẽ trở lại 0 nếu tồn tại một ứng cử viên cài đặt, nếu không sẽ trở lại 1 cho không ứng cử viên tìm thấy

import pip 

def install(package_name): 
    package = pip.main(['install', package_name])  
    result = "Package successfully installed: " if package == 0 else "Unable to find package: " 
    print(result + package_name) 

Vì vậy, nếu bạn cố gắng làm một cái gì đó như thế này:

>>> install("Virtualenvs") 

Sẽ trả lại:

Collecting virtualenvs 
Could not find a version that satisfies the requirement virtualenvs (from versions:) 
No matching distribution found for virtualenvs 
Unable to find package: virtualenvs 

Vì không có gói hợp lệ cho "Birtualenvs". Nhưng với một gói phần mềm hợp lệ:

>>> install("virtualenv") 

Sẽ trả lại:

Requirement already satisfied: virtualenv in/usr/lib/python2.7/dist-packages 
Package successfully installed: virtualenv 
+0

Lệnh 'try- trừ '' else' block thực hiện nếu không có ngoại lệ. Trong trường hợp này, không có ngoại lệ, vì mã lỗi được trả về bởi phương thức 'pip.main()'. Trong trường hợp này, tôi nghĩ bạn buộc phải kiểm tra mã lỗi trong giá trị trả về, vì nếu không bạn sẽ in thông báo "Không thể cài đặt" để cài đặt thành công. – tdube

+0

Bạn nói đúng, ngay cả khi tôi đặt một gói hợp lệ, nó đã trả lại tin nhắn không tìm thấy gói hợp lệ nào –

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