问题描述
我的理解是,最新版本的Pylint(在撰写本文时为1.0.0)支持Python 3,但我无法使其在具有Python 3.3的64位Ubuntu 13.04上运行。
我遵循了the PyPi site上的安装说明,并且Pylint 1.0.0似乎已成功安装(pylint --version
返回pylint 1.0.0),并且可以使用Python 2.7代码,但是当它看到非本地语句等时,它报告语法错误。
是什么赋予了?在Ubuntu上是否有针对Pylint的特殊安装说明?
最佳答案
Python 2和3是不同的野兽。如果您将脚本安装到一个版本的site-packages中,则不会将其安装到另一个版本中。
我会通过pip安装它,但是您需要正确版本的pip。
sudo apt-get install python3-pip
sudo pip-3.3 install pylint
这将替换您的2.7版本。我们可以通过检查less $(which pylint)
来确认这一点:
#!/usr/bin/python3.3
# EASY-INSTALL-ENTRY-SCRIPT: 'pylint==1.0.0','console_scripts','pylint'
__requires__ = 'pylint==1.0.0'
import sys
from pkg_resources import load_entry_point
if __name__ == '__main__':
sys.exit(
load_entry_point('pylint==1.0.0', 'console_scripts', 'pylint')()
)
次佳答案
@sayth对接受的答案的评论吸引了我-我同时编写了python 2和python 3脚本,并且希望能够对照正确的规则集进行检查。使用pip3 install pylint
安装pylint会向/usr/local/bin
编写一个简短的脚本,该脚本将调用python3解释器,因此,似乎假定要检查的所有文件均为python 3脚本。
要变通解决此问题,我现在有以下文件:
~/bin/pylint2
:
#!/usr/bin/python2
# EASY-INSTALL-ENTRY-SCRIPT: 'pylint','console_scripts','pylint'
__requires__ = 'pylint'
import sys
from pkg_resources import load_entry_point
if __name__ == '__main__':
sys.exit(
load_entry_point('pylint', 'console_scripts', 'pylint')()
)
和~/bin/pylint3
:
#!/usr/bin/python3
# EASY-INSTALL-ENTRY-SCRIPT: 'pylint','console_scripts','pylint'
__requires__ = 'pylint'
import sys
from pkg_resources import load_entry_point
if __name__ == '__main__':
sys.exit(
load_entry_point('pylint', 'console_scripts', 'pylint')()
)
然后,因为我喜欢直接从Geany的”Build Commands”菜单中使用pylint,并且我无法为python 2和python 3脚本指定不同的命令,所以我也有~/bin/pylint
:
#!/bin/bash
if [[ $(head -n 1 "${@: -1}") == *python3* ]]
then
# python3 file
pylint3 "$@"
else
pylint2 "$@"
fi
通过嗅探shebang来分发正确的版本。
当然,它不是完美的,但是功能性的,也许对其他人有用。
第三种答案
sudo apt install pylint3
在Ubuntu 16.04.2 LTS上为我工作
第四种答案
作为在Python 2和3上运行pylint的另一种方法,请注意,您可以使用Python的-m
开关在当前版本的Python中运行系统上安装的模块,因此您可以执行
$ python2 -m pylint
$ python3 -m pylint
明确选择您想要的那个。如果需要,可以将它们设置为别名或shell脚本。