pylint并没有指向virtualenv python

hje*_*mig 21 python pylint virtualenv

我是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)]
Run Code Online (Sandbox Code Playgroud)

在virtualenv我安装了python 2.7.如果有人可以指出我如何解决这个问题,那么会给你一些帮助.

Nou*_*him 41

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

  • @NoufalIbrahim我非常爱你这个`= command` hack.现在使用zsh已经有一段时间了,但我从来没有偶然发现那个. (3认同)
  • 十分感谢.因为我使用Python 3,所以我必须做`$(哪个pylint3)`. (2认同)
  • 这对我不起作用,因为默认情况下 venv 中不提供全局包(此处为 pylint)。运行 `python /usr/bin/pylint` 会在 venv 中给出 `importlib.metadata.PackageNotFoundError: pylint` (2认同)

Ste*_*nes 22

我很确定你需要在虚拟环境下安装pylint然后运行它的实例.

更新 - 让生活更轻松:

我建议任何在虚拟环境中工作的人都会创建一个批处理文件(在已知的位置或路径上),或者使用类似以下内容的bash脚本getlint.bat:

pip install pylint
Run Code Online (Sandbox Code Playgroud)

激活虚拟环境调用此方法会将pylint安装到该虚拟环境中.如果你有可能离线或者网络​​连接不佳,你可以在网络连接良好的情况下(可能每次为python 2和3进行一次):

mkdir C:\Some\Directory\You\Will\Leave\Alone
pip download --dest=C:\Some\Directory\You\Will\Leave\Alone pylint
Run Code Online (Sandbox Code Playgroud)

哪个会下载pylint及其依赖项C:\Some\Directory\You\Will\Leave\Alone,你可以修改getlint.bat为:

pip install pylint --find-links=C:\Some\Directory\You\Will\Leave\Alone
Run Code Online (Sandbox Code Playgroud)

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

  • 史蒂夫是正确的,我会补充说,从你的全局python卸载^它也是一个好主意.这样你就可以确保你正在运行正确的pylint. (3认同)

sta*_*cke 6

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

$ sudo vim /usr/bin/pylint
Run Code Online (Sandbox Code Playgroud)

更换:

#!/usr/bin/python
Run Code Online (Sandbox Code Playgroud)

附:

#!/usr/bin/env python
Run Code Online (Sandbox Code Playgroud)

  • 为一个用户更改这样的系统程序并不是一个好的做法。 (2认同)

Jér*_*ôme 6

如果你手动执行pylint,Noufal Ibrahim的答案是有效的.

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

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

修改为在另一个答案中建议的/usr/bin/pylint写入修复了每次使用pylint(手动使用或任何编辑器集成).#!/usr/bin/env python

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

为了避免修改该系统文件,可以创建一个/usr/local/binin 的副本/usr/bin/pylint:

cp /usr/bin/pylint /usr/local/bin/pylint
vi usr/local/bin/pylint # Edit the file to use /usr/bin/env python
Run Code Online (Sandbox Code Playgroud)

这不会被pylint更新打破,但仍然侵犯了Debian的"强烈首选".

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

alias pylint='/usr/bin/env python $(which pylint)'.
Run Code Online (Sandbox Code Playgroud)

#!/usr/bin/env python作为首选形式可能有充分的理由,尽管我不理解它们.

现在,我愿意妥协.使用非首选形式(创建#!/usr/bin/python或使用别名)允许我避免拉我的头发弄清楚如何正确配置我的linter(假设它甚至可行).


Mac*_*Gol 5

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

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

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

请注意,-i作为常规索引的用法似乎打破了提问者.