Tại sao các pip Pip cài đặt vào bên trong Python nâng SyntaxError?


232

Tôi đang cố gắng sử dụng pip để cài đặt một gói. Tôi cố gắng chạy pip installtừ shell Python, nhưng tôi nhận được một SyntaxError. Tại sao tôi nhận được lỗi này? Làm cách nào để sử dụng pip để cài đặt gói?

>>> pip install selenium
              ^
SyntaxError: invalid syntax

Câu trả lời:


297

Pip được chạy từ dòng lệnh, không phải trình thông dịch Python. Đây là một chương trình cài đặt các mô-đun, vì vậy bạn có thể sử dụng chúng từ Python. Khi bạn đã cài đặt mô-đun, sau đó bạn có thể mở shell Python và làmimport selenium .

Shell Python không phải là một dòng lệnh, nó là một trình thông dịch tương tác. Bạn gõ mã Python vào nó, không phải lệnh.


2
Cảm ơn đã làm rõ, nhưng tôi vẫn không thể chạy được. Chính xác thì nó ở đâu? Nó cho tôi một lỗi "pip không được công nhận" (vì tôi không phải là thư mục đúng). Nó đã được cài đặt trong \ site-gói nhưng tôi đang nghĩ rằng nó và tôi không thể tìm thấy bất kỳ pip.exe nào
Nacht

25
@Nacht - pipsẽ nằm trong thư mục script của cài đặt python của bạn, vì vậy bạn sẽ muốn thêm nó vào đường dẫn của mình. Thêm C:\Python32\scriptsvào của bạn PATH. Thay đổi đường dẫn khi cần thiết dựa trên nơi bạn đã cài đặt nó.
wkl

3
Trên thực tế pip.exe trong windows là một tập lệnh python như các tập lệnh khác trong thư mục / scripts, nhưng được bọc trong exe để chạy nó với trình thông dịch python mặc định. Bằng cách mở pip.exe bằng 7-zip, bạn có thể thấy các mô-đun nhập chính , sys và re ... (Và ở đó bạn sẽ tìm thấy câu trả lời làm thế nào để chạy nó trong vỏ python) -> pip là một cách thông thường mô-đun trăn. Đừng quên các cửa sổ không phải là nền tảng đầu tiên hỗ trợ python, linux là và python là một phần của HĐH.
Zydnar

1
Tôi biết với tôi tôi đã phải làm điều này từ dòng lệnh (không phải dòng lệnh python). Điều này là sau khi thay đổi thư mục thành vị trí của python.exe và sau đó cần phải đặt loại tệp trên pip3. Trong trường hợp của tôi, tôi đã theo yêu cầu cho công việc HTTP. Cụ thể: yêu cầu cài đặt python pip3.exe <--- điều này hoạt động hoàn hảo, lặp lại tương tự cho mô-đun pytz
natur3

106

Sử dụng dòng lệnh, không phải vỏ Python (DOS, PowerShell trong Windows).

C:\Program Files\Python2.7\Scripts> pip install XYZ

Nếu bạn đã cài đặt Python vào PATH của mình bằng các trình cài đặt mới nhất, bạn không cần phải ở trong thư mục đó để chạy pip

Thiết bị đầu cuối trong Mac hoặc Linux

$ pip install XYZ

3
Cảm ơn vì đã bao gồm C: ...., đã giúp tôi nhận ra nơi tôi cần cd đến khi bạn không thể mở dòng lệnh và gõ pip.
hammythepig

2
FYI I cài đặt Python tôi vừa không cài đặt PATH. Tôi đã phải làm điều này bằng tay, chỉ vào đường dẫn cài đặt trong%APPDATA%
UuDdLrLrSs

61

Vì @sinoroc đã đề xuất cách cài đặt gói chính xác qua pip đang sử dụng quy trình riêng vì pip có thể gây ra việc đóng luồng hoặc có thể yêu cầu khởi động lại trình thông dịch để tải gói đã cài đặt mới, vì vậy đây là cách sử dụng API đúng: subprocess.check_call([sys.executable, '-m', 'pip', 'install', 'SomeProject'])nhưng vì Python cho phép để truy cập API nội bộ và bạn biết những gì bạn đang sử dụng API cho bạn có thể muốn sử dụng API nội bộ, ví dụ: nếu bạn đang xây dựng trình quản lý gói GUI riêng với khả năng phục hồi thay thế như https://www.lfd.uci.edu/~gohlke/pythonlibs/

Theo dõi tâm hồn là HẾT NGÀY, thay vì hạ thấp đề xuất cập nhật. xem https://github.com/pypa/pip/issues/7498 để tham khảo.


CẬP NHẬT : Kể từ phiên bản pip 10.x không có nhiều get_installed_distributions()hoặc mainphương pháp dưới import pip thay vì sử dụng import pip._internal as pip .

CẬP NHẬT ca. v.18 get_installed_distributions() đã được gỡ bỏ. Thay vào đó, bạn có thể sử dụng trình tạo freezenhư thế này:

from pip._internal.operations.freeze import freeze

print([package for package in freeze()])

# eg output ['pip==19.0.3']


Nếu bạn muốn sử dụng pip bên trong trình thông dịch Python, hãy thử điều này:

import pip

package_names=['selenium', 'requests'] #packages to install
pip.main(['install'] + package_names + ['--upgrade']) 
# --upgrade to install or update existing packages

Nếu bạn cần cập nhật mọi gói đã cài đặt, hãy sử dụng như sau:

import pip

for i in pip.get_installed_distributions():
    pip.main(['install', i.key, '--upgrade'])

Nếu bạn muốn dừng cài đặt các gói khác nếu bất kỳ cài đặt nào không thành công, hãy sử dụng nó trong một pip.main([])cuộc gọi duy nhất :

import pip

package_names = [i.key for i in pip.get_installed_distributions()]
pip.main(['install'] + package_names + ['--upgrade'])

Lưu ý : Khi bạn cài đặt từ danh sách trong tệp có -r/ --requirementtham số, bạn KHÔNG cần hàm open ().

pip.main(['install', '-r', 'filename'])

Cảnh báo : Một số tham số đơn giản --helpcó thể khiến trình thông dịch python dừng lại.

Tò mò: Bằng cách sử dụng, pip.exebạn thực sự sử dụng trình thông dịch python và mô-đun pip. Nếu bạn giải nén pip.exehoặc pip3.exebất kể đó là python 2.x hay 3.x, bên trong là tệp CÙNG __main__.py:

# -*- coding: utf-8 -*-
import re
import sys

from pip import main

if __name__ == '__main__':
    sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
    sys.exit(main())

5
Điều này hoạt động trong trình bao Python, vì vậy tôi nghĩ nó nên là câu trả lời được chấp nhận.
François M.

5
Đây chính xác là những gì tôi đã hy vọng tìm thấy khi giải quyết vấn đề này.
Andrew Brēza

1
Câu trả lời tuyệt vời, và nó chắc chắn nên được đưa vào đây, nhưng tôi không đồng ý nó nên là câu trả lời được chấp nhận, vì người dùng rõ ràng đang cố gắng làm cho cú pháp "pip install" phổ biến hiện nay hoạt động. Vì cú pháp đó sẽ không hoạt động với phương thức này, nó không trực tiếp giải quyết vấn đề đó. Nó có thể hữu ích hơn câu trả lời được chấp nhận :)
Dan

Không biết OP thực sự có ý nghĩa gì, nhưng câu trả lời này thực sự là câu trả lời muộn, vì vậy nó không quan trọng nếu nó được chấp nhận ở đây.
Zydnar

@Zydnar, đồng ý - câu trả lời của tôi là dành cho Francois, người nói đây sẽ là câu trả lời được chấp nhận. Tôi đăng lý do của tôi là tại sao không. Điều đó nói rằng, tôi vẫn nghĩ rằng đây là một bài viết tuyệt vời.
Dan

53

Để chạy pip trong Python 3.x, chỉ cần làm theo các hướng dẫn trên trang của Python: Cài đặt Mô-đun Python .

python -m pip install SomePackage

Lưu ý rằng điều này được chạy từ dòng lệnh chứ không phải shell python (lý do lỗi cú pháp trong câu hỏi ban đầu).


1
Tôi vẫn nhận được cú pháp không hợp lệ. Tôi đang sử dụng IPython trên máy tính Windows 10. Có suy nghĩ gì không?
DataGirl

Trang này có hướng dẫn cài đặt IPython: ipython.readthedocs.io/en/ sóng / install / index.html $ pip cài đặt ipython. Có lẽ điều đó sẽ dịch sang $ python -m pip cài đặt ipython
Dan

1
Điều này không trả lời bất cứ điều gì về lỗi cú pháp
OneCricketeer

Điều này đã được bao phủ bởi các câu trả lời khác, nhưng tôi đã thêm nó ngay bây giờ. Câu trả lời của tôi chỉ là một bổ sung cho 3.x.
Dan

làm việc cho tôi trên windows 10 - cũng khuyên tôi nên nâng cấp pip theo nhận xét trước đó :)
Kdean571

2

Ban đầu tôi cũng gặp phải vấn đề tương tự, tôi đã cài đặt python và khi tôi chạy piplệnh, nó đã sử dụng để ném cho tôi một lỗi như trong hình bên dưới.

nhập mô tả hình ảnh ở đây

Đảm bảo đường dẫn pip được thêm vào trong các biến môi trường. Đối với tôi, đường dẫn cài đặt python và pip là ::
Python: C:\Users\fhhz\AppData\Local\Programs\Python\Python38\
pip: C:\Users\fhhz\AppData\Local\Programs\Python\Python38\Scripts
Cả hai đường dẫn này đã được thêm vào đường dẫn trong các biến môi trường.

Bây giờ Mở một cửa sổ cmd mới và gõ pip, bạn sẽ thấy một màn hình như bên dưới.

nhập mô tả hình ảnh ở đây

Bây giờ gõ pip install <<package-name>>. Ở đây tôi đang cài đặt trình gián điệp gói để câu lệnh dòng lệnh của tôi sẽ như pip install spydervà đây là màn hình đang chạy của tôi ..

nhập mô tả hình ảnh ở đây

và tôi hy vọng chúng ta đã hoàn thành việc này !!


1
Điều này không trả lời câu hỏi.
sinoroc

0

bạn cần gõ nó trong cmd chứ không phải trong IDLE. bởi vì IDLE không phải là một dấu nhắc lệnh nếu bạn muốn cài đặt một cái gì đó từ IDLE gõ này

>>>from pip.__main__ import _main as main
>>>main(#args splitted by space in list example:['install', 'requests'])

đây là cách gọi pip như pip <commands>trong terminal. Các lệnh sẽ được phân tách bằng khoảng trắng mà bạn đang thực hiện ở đó.


Đây là câu trả lời lỗi thời kể từ về phiên bản pip 10.0. ImportError: cannot import name mainsử dụng pip v19.0.3
Zydnar

-1

Lập trình, sau đây hiện đang hoạt động. Tôi thấy tất cả các câu trả lời bài 10.0 và tất cả, nhưng không ai trong số chúng là con đường chính xác cho tôi. Chắc chắn trong Kaggle, apporach này hoạt động

from pip._internal import main as _main

package_names=['pandas'] #packages to install
_main(['install'] + package_names + ['--upgrade']) 

Tại sao không sử dụng jusy: từ pip .__ main__ nhập _ chính?
Matthijs990

-3

Hãy thử nâng cấp pip với lệnh dưới đây và thử lại

python -m pip install -U pip

một bản cập nhật của pip sẽ không cho phép nó hoạt động trong vỏ trăn
Matthijs990
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.