27

我对 python 很陌生,目前我正在尝试使用 pylint 来检查代码质量。我遇到了问题。我的 pylint 没有指向 virtualenv python 解释器。这是我运行 pylint --version 时得到的输出

 $ pylint --version
   pylint 0.21.1,
   astng 0.20.1, common 0.50.3
   Python 2.6.6 (r266:84292, Jul 10 2013, 22:48:45)
   [GCC 4.4.7 20120313 (Red Hat 4.4.7-3)]

在 virtualenv 中,我安装了 python 2.7。如果有人能指出我如何解决这个问题,我会感谢你的帮助。

4

10 回答 10

48

一个便宜的技巧是使用 virtualenv python 运行(全局)pylint。您可以使用python $(which pylint)而不是仅使用pylint. 在 zsh 上,您也可以执行python =pylint.

于 2013-07-29T12:27:28.653 回答
23

我相当确定您需要在虚拟环境下安装 pylint,然后运行它的该实例。

更新 - 让生活更轻松:

我建议任何在虚拟环境中工作很多的人都创建一个批处理文件(在已知位置或路径上)或 ​​bash 脚本,其内容类似于以下内容,称为getlint.bat

pip install pylint

在激活虚拟环境后调用它会将 pylint 安装到该虚拟环境中。如果您可能处于离线状态或互联网连接不佳,则可以在互联网连接良好的情况下进行一次(对于 python 2 和 3 中的每一个可能一次):

mkdir C:\Some\Directory\You\Will\Leave\Alone
pip download --dest=C:\Some\Directory\You\Will\Leave\Alone pylint

它将下载 pylint 及其依赖项C:\Some\Directory\You\Will\Leave\Alone,您可以修改getlint.bat为:

pip install pylint --find-links=C:\Some\Directory\You\Will\Leave\Alone

然后它将使用预下载的版本。

于 2013-07-29T11:46:52.170 回答
8

如果您手动执行 pylint,Noufal Ibrahim 的答案就有效。

如果您从编辑器/IDE 执行 pylint,则需要正确配置插件。

它可能会变得棘手。这可能被认为是每个 IDE/插件的错误,但事实就是如此。

修改为按照另一个答案中的建议/usr/bin/pylint进行编写可以解决每次使用 pylint (手动使用或任何编辑器集成)的问题。#!/usr/bin/env python

但是,至少在 Debian 中,使用#!/usr/bin/python是一种设计选择,而不是错误。请参阅此处了解基本原理。

为避免修改该系统文件,可以创建/usr/bin/pylintin的副本/usr/local/bin

cp /usr/bin/pylint /usr/local/bin/pylint
vi usr/local/bin/pylint # Edit the file to use /usr/bin/env python

这不会被 pylint 更新破坏,但仍然侵犯了 Debian 的“强烈首选”。

此方法需要 root 权限。非特权用户可以创建别名

alias pylint='/usr/bin/env python $(which pylint)'.

我总是在 virtualenv 中开发,并且在创建 virtualenv 时设置了一个 postmkvirtualenv 挂钩来自动安装 pylint 和 flake8,所以我不再使用 debian 分发的版本了。

于 2016-04-21T09:46:56.400 回答
6

我也遇到了这个问题。我的解决方案是简单地编辑 pylint 程序的 shebang,就像这样......(你到 pylint 的路径可能与我的不同)

$ sudo vim /usr/bin/pylint

更换:

#!/usr/bin/python

和:

#!/usr/bin/env python
于 2014-05-27T19:44:42.420 回答
5

该问题已在聊天中解决(评论中的链接)。

问题在于使用sudo yum install pylint,因为它在全局环境中安装了 pylint。解决方案是使用以下命令:

pip install -i http://f.pypi.python.org/simple pylint

请注意-i用法,因为对于提问者来说,常规索引似乎被破坏了。

于 2013-07-29T12:06:06.350 回答
2

我知道这个问题得到回答已经有一段时间了,但我只是想我应该把这篇文章留在这里,以防其他人遇到同样的问题。

如果由于某种原因您需要保留pylint在全局空间而不是虚拟环境中,则可以使用此处的建议:PyLint + VirtualEnv

它基本上说配置您pylint使用init-hook和编码版本的 Python 程序,该程序将使用全局pylint并加载环境的其余部分。

于 2016-09-05T01:54:02.660 回答
1

当你使用 Pipenv / virtualenv 时,在 virtualenv 中安装 pylint:

pipenv install --dev pylint

或者,如果您不使用 Pipenv,请在激活 virtualenv 后使用 pip 安装它:

# activate virtualenv, e.g. `. env/bin/activate`
pip install pylint
于 2020-08-20T02:12:35.483 回答
1

您可以通过调用目标 python 解释器到达那里:

./env/bin/python -m pylint ...

# or in an already active env
python -m pylint ...
于 2016-02-12T18:47:47.567 回答
0

就在今天遇到了同样的问题。继续ThorSummoner的回答,在 Pipenv 等虚拟环境中使用 Pylint 和 pylint-django 时,请确保使用目标 python 解释器 ( python -m pylint)调用 pylint

一个可以在本地和 CI 上工作的好方法是在 Pipfile 的脚本部分写下 lint 命令:

[scripts]
lint = "python -m pylint [--options] all-my-modules-names..."

然后调用 pylint 就像这样简单:

pipenv run lint
于 2019-07-23T21:01:15.067 回答
0

我正在使用 Syntastic + Pylint 组合,并且由于我有许多不同的 virtualenvs 可以在任何给定时间使用,因此我在virtualenv命令上创建了一个包装器,除其他外,在所有要求之后安装pylint .

这样,每当我激活一个 virtualenv 时,我都会得到它自己的 pylint 版本。

希望这会有所帮助,并感谢有关从@briford-wylie 中删除全局的提示

于 2017-04-12T07:57:59.257 回答