pylint并没有指向virtualenv python

时间:2013-07-29 11:41:51

标签: python virtualenv pylint

我是python和currenty的新手我正在尝试使用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。如果有人可以指出我如何解决这个问题,那么会帮助你。

10 个答案:

答案 0 :(得分:41)

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

答案 1 :(得分:22)

我很确定您需要在虚拟环境下安装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

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

答案 2 :(得分:6)

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

$ sudo vim /usr/bin/pylint

更换:

#!/usr/bin/python

使用:

#!/usr/bin/env python

答案 3 :(得分:6)

如果您手动执行pylint,

Noufal Ibrahim's answer会有效。

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

这可能会变得棘手。这可能被认为是每个IDE /插件的错误,但这是它的原因。

根据another answer中的建议修改/usr/bin/pylint以编写#!/usr/bin/env python,以便每次使用pylint(手动使用或任何编辑器集成)时都会修复此问题。

但是,至少在Debian中,使用#!/usr/bin/pythondesign choice,而不是bug。我提供的链接并未解释其基本原理。 pylint包的维护者不想移动到#!/usr/bin/env python

为避免修改该系统文件,可以在/usr/bin/pylint中创建/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)'.

#!/usr/bin/python可能是首选形式的充分理由,但我不了解它们。

目前,我愿意与此妥协。使用非首选形式(创建/usr/local/bin/pylint或使用别名)可以避免拉我的头发弄清楚如何正确配置我的linter(假设它甚至可行)。

答案 4 :(得分:5)

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

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

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

请注意-i用法,因为常规索引似乎已被提问者破坏。

答案 5 :(得分:2)

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

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

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

答案 6 :(得分:0)

你可以通过调用目标python解释器来实现目标:

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

# or in an already active env
python -m pylint ...

答案 7 :(得分:0)

我使用了Syntastic + Pylint组合,因为我有许多不同的virtualenvs,我可以在任何给定的时间工作,我已经创建了一个包装器,而不是 virtualenv 命令,在其他一些事情中,在所有要求之后安装 pylint

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

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

答案 8 :(得分:0)

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

在本地和CI上也可以使用的一种好方法是在Pipfile的脚本部分中写下lint命令:

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

然后调用pylint就像:

pipenv run lint

答案 9 :(得分:0)

使用Pipenv / virtualenv时,请在virtualenv内安装pylint:

pipenv install --dev pylint

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

# activate virtualenv, e.g. `. env/bin/activate`
pip install pylint