Python 3:ImportError“没有名为 Setuptools 的模块”

Python 3:ImportError“没有名为 Setuptools 的模块”

我正在尝试升级 mnemosyne (http://mnemosyne-proj.org/)。

我必须安装 Python3(命名依赖项;自此次升级以来,mnemosyne 的代码已移至 Python3)。我之前的升级没有遇到任何问题,因此我认为此问题可能与 Python3 有关。

我正在运行 Ubuntu 14.04 LTS,我承认我在这方面有点力不从心。毫无疑问,这里没有足够的信息来找到解决方案,所以请询问,我会更新新信息。

使用以下命令执行 setup.py:

sudo python3 setup.py install

我遇到了以下错误。

Traceback (most recent call last):
  File "setup.py", line 2, in <module>
    from setuptools import setup, Command
ImportError: No module named 'setuptools'

我广泛阅读(包括https://stackoverflow.com/questions/14426491/python-3-importerror-no-module-named-setuptools/16511140我尝试了很多建议,但都侥幸避免了(无意中)破坏我的 Ubuntu 安装。

尝试的修复包括;

sudo apt-get install python3-setuptools
python3-setuptools is already the newest version.

sudo apt-get install python3-pip
python3-pip is already the newest version.

sudo pip3 install --upgrade setuptools
The directory '/home/jumblut/.cache/pip/http' or its parent directory is
not owned by the current user and the cache has been disabled. Please
check the permissions and owner of that directory. If executing pip with
sudo, you may want sudo's -H flag.
The directory '/home/jumblut/.cache/pip' or its parent directory is not
owned by the current user and caching wheels has been disabled. check the
permissions and owner of that directory. If executing pip with sudo, you
may want sudo's -H flag.
Requirement already up-to-date: setuptools in /usr/local/lib/python3.4  
/dist-packages

Python3信息:

which python3
/usr/local/bin/python3

提前致谢。

编辑:额外信息-权限

/usr/local/lib/python3.4$ ls -l
total 4
drwxrwsr-x 7 root mygroup 4096 Dec 16 21:55 dist-packages

EDIT2:额外信息-wget https://bootstrap.pypa.io/ez_setup.py -O - | sudo python3.5错误

wget https://bootstrap.pypa.io/ez_setup.py -O - | sudo python3.5
--2016-12-19 00:36:50--  https://bootstrap.pypa.io/ez_setup.py
Resolving bootstrap.pypa.io (bootstrap.pypa.io)... 151.101.80.175
Connecting to bootstrap.pypa.io (bootstrap.pypa.io)|151.101.80.175|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 12746 (12K) [text/x-python]
Saving to: 'STDOUT’

100%[=============================================================================================>] 12,746      --.-K/s   in 0.006s  

2016-12-19 00:36:50 (2.02 MB/s) - written to stdout [12746/12746]

Traceback (most recent call last):
  File "<stdin>", line 436, in <module>
  File "<stdin>", line 432, in main
  File "<stdin>", line 347, in download_setuptools
  File "<stdin>", line 368, in _resolve_version
  File "/usr/local/lib/python3.5/urllib/request.py", line 163, in urlopen
    return opener.open(url, data, timeout)
  File "/usr/local/lib/python3.5/urllib/request.py", line 466, in open
    response = self._open(req, data)
  File "/usr/local/lib/python3.5/urllib/request.py", line 489, in _open
    'unknown_open', req)
  File "/usr/local/lib/python3.5/urllib/request.py", line 444, in _call_chain
    result = func(*args)
  File "/usr/local/lib/python3.5/urllib/request.py", line 1324, in unknown_open
    raise URLError('unknown url type: %s' % type)
urllib.error.URLError: <urlopen error unknown url type: https>

EDIT3:额外信息-sudo python3.5 ez_setup.py错误

sudo python3.5 ez_setup.py
[sudo] password for jumblut: 
Traceback (most recent call last):
  File "ez_setup.py", line 436, in <module>
    sys.exit(main())
  File "ez_setup.py", line 432, in main
    archive = download_setuptools(**_download_args(options))
  File "ez_setup.py", line 347, in download_setuptools
    version = _resolve_version(version)
  File "ez_setup.py", line 368, in _resolve_version
    resp = urlopen(meta_url)
  File "/usr/local/lib/python3.5/urllib/request.py", line 163, in urlopen
    return opener.open(url, data, timeout)
  File "/usr/local/lib/python3.5/urllib/request.py", line 466, in open
    response = self._open(req, data)
  File "/usr/local/lib/python3.5/urllib/request.py", line 489, in _open
    'unknown_open', req)
  File "/usr/local/lib/python3.5/urllib/request.py", line 444, in _call_chain
    result = func(*args)
  File "/usr/local/lib/python3.5/urllib/request.py", line 1324, in unknown_open
    raise URLError('unknown url type: %s' % type)
urllib.error.URLError: <urlopen error unknown url type: https>

答案1

免责声明:经过多次尝试和错误,我终于解决了这个问题。因为我尝试了很多不同的方法,所以这是我对实际修复方法的最佳猜测。

需要注意的是,我通过编译源代码来安装 Python3,而不是从 repos (apt-get) 安装。我必须这么做,因为 Python v3.5 目前在 Ubuntu 14.04 LTS 的仓库中不可用。

我把答案分为两部分;值得了解的事情它提供了很多背景信息,这些信息通常被认为是知识(作为一个新手,这些是我一路走来学到的教训),而实际的解决方案

值得了解的事情

  • Python 有两个主要版本,它们可以和谐共存:Python 2.x 和 Python 3.x。Python 2.x 通常使用 运行,python而 Python3.x 通常使用 运行。您可以使用和python3检查每个版本的具体版本。确保您使用的是您认为正在使用的版本。python -Vpython3 -V
  • 您可以在安装之前使用 检查要从存储库安装哪个版本apt-cache policy <package name>。这是一种避免安装同一软件包的多个版本的好方法,尤其是 Python。确定您是否可以通过存储库安装或是否必须找到所需版本的源代码也很重要。

旁注:尝试通过删除/卸载不需要的版本来清理多个 Python 版本是危险的,如果您不知道自己在做什么,则可能会损坏您的系统,因为 Python 是核心操作系统组件。

  • 从源代码编译时,您需要根据自己的需要确保已获得所有必需的依赖项(使用 apt-get 的好处是,通常所有依赖项都会为您排序)。注意:如果您安装依赖项您编译后,必须重新编译才能使用它。

解决方案

安装以下内容编译 Python 源代码:

sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils

下载并编译你选择的 Python 版本的源代码python.org. 编译指令通常位于自述

使用以下命令验证你的 Python 版本;

python -V分别python3 -V针对 Python 2.x 和 Python 3.x。

安装pip(用于安装和管理Python包的工具);

wget https://bootstrap.pypa.io/get-pip.py -O - | sudo python3

检查pip是否对应你的Python版本;

pip3 --version

使用以下工具安装setuptools;

wget https://bootstrap.pypa.io/ez_setup.py -O - | sudo python3

相关内容