为啥 Python 中的“pip install”会引发 SyntaxError?

Posted

技术标签:

【中文标题】为啥 Python 中的“pip install”会引发 SyntaxError?【英文标题】:Why does "pip install" inside Python raise a SyntaxError?为什么 Python 中的“pip install”会引发 SyntaxError? 【发布时间】:2012-01-22 19:09:21 【问题描述】:

我正在尝试使用 pip 安装软件包。我尝试从 Python shell 运行pip install,但我得到了SyntaxError。为什么我会收到此错误?如何使用 pip 安装包?

>>> pip install selenium
              ^
SyntaxError: invalid syntax

【问题讨论】:

因为你是在python控制台上执行,所以请在“python终端”上执行。 你可以用IPython解释器来做(与问题相同的语法:>>> pip install selenium)。不在常规的 Python 解释器中。不过还是用终端安装pip包比较好。 @SandeshMhatre “python 控制台”和“python 终端”有什么区别?您可能想说“请改为在 shell 中执行” 【参考方案1】:

pip 从命令行运行,而不是 Python 解释器。它是一个安装模块的程序,因此您可以从 Python 中使用它们。安装模块后,您可以打开 Python shell 并执行import selenium

Python shell 不是命令行,它是一个交互式解释器。您在其中输入 Python 代码,而不是命令。

【讨论】:

感谢您的澄清,但我仍然无法运行它。它究竟在哪里?它给了我一个“无法识别 pip”的错误(因为我不是正确的目录)。它安装在 \site-packages 中,但我正在寻找它,但我找不到任何 pip.exe @Nacht - pip 将在您的 python 安装的脚本目录中,因此您需要将其添加到您的路径中。将C:\Python32\scripts 添加到您的PATH。根据您的安装位置,根据需要更改路径。 实际上windows中的pip.exe和/scripts目录中的其他脚本一样是一个python脚本,但是包装在exe中以使用默认的python解释器运行它。通过使用 7-zip 打开 pip.exe,您可以看到 main.py 正在导入 pip、sys 和 re 模块...(您将在此处找到如何在 python shell 中运行它的答案) --> pip 是一个常规的 python 模块。别忘了 windows 不是第一个支持 python 的平台,linux 是,而且 python 是 OS 的一部分。 我知道我必须从命令行(而不是 python 命令行)执行此操作。这是在将目录更改为 python.exe 的位置之后,然后需要将文件类型放在 pip3 上。就我而言,我是在请求 HTTP 工作之后。即: python pip3.exe install requests 【参考方案2】:

使用命令行,而不是 Python shell(DOS、Windows 中的 PowerShell)。

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

如果您使用最新的安装程序将 Python 安装到 PATH 中,则无需在该文件夹中运行 pip

Mac 或 Linux 中的终端

$ pip install XYZ

【讨论】:

感谢您包含 C:....,帮助我意识到我需要 cd 到哪里,因为您不能简单地打开命令行并键入 pip。 仅供参考,我刚刚安装的 Python 没有设置 PATH。我必须手动执行此操作,指向 %APPDATA% 中的安装路径【参考方案3】:

@sinoroc 建议通过 pip 安装包的正确方法是使用单独的进程,因为 pip 可能会导致关闭线程或可能需要重新启动解释器以加载新安装的包,所以这是使用 API 的正确方法:@ 987654323@ 但是由于 Python 允许访问内部 API,并且您知道您使用的是什么 API,因此您可能仍然想使用内部 API,例如。如果您正在使用 https://www.lfd.uci.edu/~gohlke/pythonlibs/ 等替代资源构建自己的 GUI 包管理器

以下解决方案已过时,而不是反对建议更新。请参阅https://github.com/pypa/pip/issues/7498 以供参考。


更新自 pip 版本 10.ximport pip 下不再有 get_installed_distributions()main 方法改为使用 import pip._internal as pip .

更新约。 v.18 get_installed_distributions() 已被删除。相反,您可以像这样使用生成器freeze

from pip._internal.operations.freeze import freeze

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

# eg output ['pip==19.0.3']


如果你想在 Python 解释器中使用 pip,试试这个:
import pip

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

如果您需要更新每个已安装的软件包,请使用以下命令:

import pip

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

如果您想在任何安装失败时停止安装其他软件包,请在一个 pip.main([]) 调用中使用它:

import pip

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

注意:当您从带有-r / --requirement 参数的文件中的列表安装时,您不需要 open() 函数。

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

警告:一些简单的参数--help可能会导致python解释器停止。

好奇心:通过使用pip.exe,你实际上使用了 python 解释器和 pip 模块。如果你解压pip.exe或者pip3.exe不管是python 2.x还是3.x,里面都是同一个文件__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())

【讨论】:

这适用于 Python shell,所以我认为它应该是公认的答案。 这正是我在谷歌搜索这个问题时希望找到的。 很好的答案,它肯定应该包含在这里,但我不同意它应该是公认的答案,因为用户显然试图使现在无处不在的语法“pip install”工作。由于该语法不适用于此方法,因此它不能直接解决该问题。它可能比接受的答案更有用:) 不知道 OP 的真正含义是什么,但这个答案确实是迟到的答案,所以这里是否被接受并不重要。 @Zydnar,同意——我的回应是弗朗索瓦,他说这应该是公认的答案。我发布了我为什么不这样做的理由。尽管如此,我仍然认为这是一篇很棒的文章。【参考方案4】:

要在 Python 3.x 中运行 pip,只需按照 Python 页面上的说明进行操作:Installing Python Modules。

python -m pip install SomePackage

请注意,这是从命令行而不是 python shell 运行的(原始问题中语法错误的原因)。

【讨论】:

我仍然收到无效的语法。我在 Windows 10 电脑上使用 IPython。有什么想法吗? 此页面有安装 IPython 的说明:ipython.readthedocs.io/en/stable/install/index.html$ pip install ipython。大概这会转化为 $ python -m pip install ipython 其他答案已经涵盖了这一点,但我现在添加了它。我的回答只是对 3.x 的补充。 在 Windows 10 上为我工作 - 还建议我按照之前的评论升级 pip :)【参考方案5】:

我安装了 python,当我运行 pip 命令时,它会抛出如下图所示的错误。

确保在环境变量中添加 pip 路径。对我来说,python和pip的安装路径是:: 蟒蛇:C:\Users\fhhz\AppData\Local\Programs\Python\Python38\ 点子:C:\Users\fhhz\AppData\Local\Programs\Python\Python38\Scripts 这两个路径都被添加到环境变量中的路径中。

现在打开一个新的 cmd 窗口并输入 pip,您应该会看到如下屏幕。

现在输入pip install <<package-name>>。在这里我正在安装包 spyder,所以我的命令行语句将是 pip install spyder,这是我的运行屏幕..

我希望我们已经完成了这个!

【讨论】:

这没有回答问题。【参考方案6】:

您需要在 cmd 中输入,而不是在 IDLE 中。因为如果你想从 IDLE 安装一些东西,IDLE 不是命令提示符,请输入这个

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

这是在终端中调用 pip 之类的 pip <commands>。这些命令将由您在那里执行的空格分隔。

【讨论】:

这是自 pip 10.0 版以来的过时答案。 ImportError: cannot import name main 使用 pip v19.0.3【参考方案7】:

以编程方式,以下当前有效。我看到了 10.0 之后的所有答案,但没有一个对我来说是正确的路径。在 Kaggle 中,这种方法确实有效

from pip._internal import main as _main

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

【讨论】:

为什么不直接使用:from pip.__main__ import _main?【参考方案8】:

如果你是从命令行做的,

试试-

python -m pip install selenium

或(Python3及以上)

python3 -m pip install selenium

【讨论】:

这并没有说明为什么会出现 SyntaxError

以上是关于为啥 Python 中的“pip install”会引发 SyntaxError?的主要内容,如果未能解决你的问题,请参考以下文章

安装 KIVY 时出错:为啥执行后出现错误:“python -m pip install kivy”?

为啥我在使用 pip install 命令时会收到此错误 [重复]

为啥我不能让 `pip install lxml` 在 vi​​rtualenv 中工作?

python windows 下pip easy_install 使用错误的问题

使用 pip install 时,为啥 (from versions: xxx) 的列表很短?

pip install出错,pip版本不匹配