我是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。如果有人可以指出我如何解决这个问题,那么会帮助你。
答案 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)
如果从编辑器/ IDE执行pylint,则需要正确配置插件。
这可能会变得棘手。这可能被认为是每个IDE /插件的错误,但这是它的原因。
根据another answer中的建议修改/usr/bin/pylint
以编写#!/usr/bin/env python
,以便每次使用pylint(手动使用或任何编辑器集成)时都会修复此问题。
但是,至少在Debian中,使用#!/usr/bin/python
是design 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