【问题标题】:pycrypto works on python2.7 not python3.6pycrypto 适用于 python2.7 而不是 python3.6
【发布时间】:2018-11-04 16:31:29
【问题描述】:

我使用的是 Ubuntu 16 机器。我想使用 python 3。我安装了它。但是,我必须使用命令python3,否则它会运行python2.7。

我使用pip install pycrypto 安装了pycrypto 库,但是当我尝试使用python3 从pycrypto 导入时出现此错误:

>>> from Crypto.Cipher import AES
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named 'Crypto'

虽然我在 python 2.7 中没有遇到同样的问题(导入工作正常)。问题是什么?如何解决?

更新:

我试过pip3,结果如下:

x@x-VirtualBox:~$ sudo -H pip3 install pycrypto
Requirement already satisfied: pycrypto in /usr/local/lib/python3.6/dist-packages (2.6.1)
x@x-VirtualBox:~$ python3
Python 3.5.2 (default, Nov 23 2017, 16:37:01) 
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from Crypto.Cipher import AES
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named 'Crypto'
>>> 

【问题讨论】:

  • pip3 install pycrypto ?
  • @CristiFati 你能检查我的更新吗?

标签: python python-3.x python-2.7 python-3.6 pycrypto


【解决方案1】:

显然,您安装了 2 个 Python3 实例:

  1. Python3.6:
    • 你想用哪个
    • pycrypto 的安装位置(通过 pip3)
  2. Python3.5.2:
    • 由python3命令启动

所以,您启动了错误的 Python 解释器,很可能是因为 python3 指向 /usr/bin/python3(您可以检查在你的shell中输入which python3),它是Python3.5.2,它的路径在${PATH}环境变量中。

从您的 pip 路径来看,Python3.6 似乎安装在 /usr/local 下(并且可执行文件是 /usr/local/bin/python3),所以你可以:

  • 通过完整路径启动 Python3 可执行文件(/usr/local/bin/python3,如上所述)
  • 将 /usr/local/bin 添加到 ${PATH} 之前 /usr/bin,并且然后只需在 shell 中键入 python3 即可启动 Python3.6 - 但我建议不要这样做
  • 还有其他方法(例如创建别名),但我想你明白了

@EDIT0:

根据 cmets 的要求提供更多信息。这与 Python 无关,都只是 Ubtu 的东西:

  • 列出软件包:使用 apt 或 dpkg
  • 要检查Python2.7(或任何其他版本):使用which(如上)
  • 您无需卸载Python3.5。多个版本可以安全共存
  • 如果您想将其设为默认值,请创建一个别名(就像我在下面示例末尾所做的那样),如果您希望它是持久的,请将其放在您的 profile 文件中(例如.profile、.bashrc、.bash_profile)

示例(在我的 VM 上):

[cfati@cfati-ubtu16x64-0:~/Work/Dev/StackOverflow/q050526408]> apt list python python3
Listing... Done
python/xenial-updates,now 2.7.12-1~16.04 amd64 [installed]
python3/xenial,now 3.5.1-3 amd64 [installed]
[cfati@cfati-ubtu16x64-0:~/Work/Dev/StackOverflow/q050526408]> which python
/usr/bin/python
[cfati@cfati-ubtu16x64-0:~/Work/Dev/StackOverflow/q050526408]> ll /usr/bin/python
lrwxrwxrwx 1 root root 7 mar 12 16:25 /usr/bin/python -> python2*
[cfati@cfati-ubtu16x64-0:~/Work/Dev/StackOverflow/q050526408]> dpkg -S /usr/bin/python3 /usr/bin/python2
python3-minimal: /usr/bin/python3
python-minimal: /usr/bin/python2
[cfati@cfati-ubtu16x64-0:~/Work/Dev/StackOverflow/q050526408]> alias python3=/usr/local/bin/python3

【讨论】:

  • 如何删除python 3.5.2?
  • & 我怎样才能使 python3.6.5 成为默认值? python2.7的路径是什么以防万一我需要它?
【解决方案2】:

当你使用 python3 时:

pip3 install pycrypto

【讨论】:

    猜你喜欢
    • 2020-11-18
    • 2016-09-19
    • 2017-09-07
    • 2019-05-10
    • 1970-01-01
    • 2020-09-18
    • 2019-08-09
    • 2014-12-24
    • 2017-04-26
    相关资源
    最近更新 更多