我使用Ubuntu,并安装了Python 2.7.5和3.4.0。在Python 2.7.5中,我能够成功地分配一个变量x = Value(' I ', 2),但在3.4.0中不能。我得到:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python3.4/multiprocessing/context.py", line 132, in Value
from .sharedctypes import Value
File "/usr/local/lib/python3.4/multiprocessing/sharedctypes.py", line 10, in <
module>
import ctypes
File "/usr/local/lib/python3.4/ctypes/__init__.py", line 7, in <module>
from _ctypes import Union, Structure, Array
ImportError: No module named '_ctypes'
我刚刚通过安装3.4.0的源代码更新到了3.3.2。它安装在/usr/local/lib/python3.4.
我是否正确地更新到Python 3.4 ?
我注意到一件事,Python 3.4安装在usr/local/lib中,而Python 3.3.2仍然安装在usr/lib中,所以它没有被覆盖。
在一个新的Debian镜像上,克隆https://github.com/python/cpython并运行:
sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade
sudo apt-get install build-essential python-dev python-setuptools python-pip python-smbus
sudo apt-get install libncursesw5-dev libgdbm-dev libc6-dev
sudo apt-get install zlib1g-dev libsqlite3-dev tk-dev
sudo apt-get install libssl-dev openssl
sudo apt-get install libffi-dev
现在执行上面克隆的配置文件:
./configure
make # alternatively `make -j 4` will utilize 4 threads
sudo make altinstall
安装了3.7,为我工作。
轻微的更新
看起来我说过我会用更多的解释来更新这个答案,两年后我没有什么可补充的了。
这篇SO帖子解释了为什么像python-dev这样的库可能是必要的。
这篇SO帖子解释了为什么在make命令中使用altinstall而不是install参数。
除此之外,我猜选择是阅读cpython代码库,寻找需要满足的#include指令,但我通常做的是继续尝试安装包,并继续阅读输出,安装所需的包,直到成功。
这让我想起了工程师、经理和程序员的故事,他们的汽车滚下了山坡。
在一个新的Debian镜像上,克隆https://github.com/python/cpython并运行:
sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade
sudo apt-get install build-essential python-dev python-setuptools python-pip python-smbus
sudo apt-get install libncursesw5-dev libgdbm-dev libc6-dev
sudo apt-get install zlib1g-dev libsqlite3-dev tk-dev
sudo apt-get install libssl-dev openssl
sudo apt-get install libffi-dev
现在执行上面克隆的配置文件:
./configure
make # alternatively `make -j 4` will utilize 4 threads
sudo make altinstall
安装了3.7,为我工作。
轻微的更新
看起来我说过我会用更多的解释来更新这个答案,两年后我没有什么可补充的了。
这篇SO帖子解释了为什么像python-dev这样的库可能是必要的。
这篇SO帖子解释了为什么在make命令中使用altinstall而不是install参数。
除此之外,我猜选择是阅读cpython代码库,寻找需要满足的#include指令,但我通常做的是继续尝试安装包,并继续阅读输出,安装所需的包,直到成功。
这让我想起了工程师、经理和程序员的故事,他们的汽车滚下了山坡。