python - pycrypto 适用于 python2.7 而不是 python3.6

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

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

我使用 pip install pycrypto 安装了 pycrypto 库,但是当我尝试使用 python3pycrypto 导入时,我收到此错误:

>>> 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'
>>> 

最佳答案

显然,您安装了 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:

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

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

示例(在我的虚拟机上):

[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 - pycrypto 适用于 python2.7 而不是 python3.6,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50526408/

相关文章:

python - 记分器函数: difference between make_scorer/score_func and

python - 避免在 pandas to_excel 方法中合并单元格

python - 在 QDialog 中显示子进程的实时输出

python - 这个简单的If语句向我发送了SyntaxError : invalid syntax on Python 3.6

python-3.x - 如何禁用Starlette静态文件缓存?

Python Selenium-webdriver : for loop returning first element of the list throughout the loop

python - __eq__ 属性和相等运算符之间的关系?

python - Blender 2.6 JSON 导出器,纹理仅在立方体的一侧错误

python - Python 断言是拐杖吗?

python-2.7 - 错误 : Problem: conflicting requests - nothing provides/usr/bin/python needed by python-chardet in CentOS 8