编译python 3.6后缺少_socket

时间:2016-12-14 15:28:59

标签: python-3.x sockets compilation python-import

我尝试使用:

编译python3.6
emc@belvedere:~/py36/Python-3.6.0rc1> ./configure --prefix=/home/emc/py36 --with-system-expat --with-system-expat --with-system-ffi --disable-ipv6 && make && make install

编译成功我可以开始翻译:

emc@belvedere:~/py36/bin> ./python3.6
Python 3.6.0rc1 (default, Dec 14 2016, 13:08:45) 
[GCC 4.8.1 20130909 [gcc-4_8-branch revision 202388]] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 

但:

emc@belvedere:~/py36/bin> pip3.6 
Traceback (most recent call last):
  File "/home/emc/py36/lib/python3.6/site-packages/pip/_vendor/requests/packages/__init__.py", line 27, in <module>
    from . import urllib3
  File "/home/emc/py36/lib/python3.6/site-packages/pip/_vendor/requests/packages/urllib3/__init__.py", line 8, in <module>
    from .connectionpool import (
  File "/home/emc/py36/lib/python3.6/site-packages/pip/_vendor/requests/packages/urllib3/connectionpool.py", line 7, in <module>
    from socket import error as SocketError, timeout as SocketTimeout
  File "/home/emc/py36/lib/python3.6/socket.py", line 49, in <module>
    import _socket
ModuleNotFoundError: No module named '_socket'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/emc/py36/bin/pip3.6", line 7, in <module>
    from pip import main
  File "/home/emc/py36/lib/python3.6/site-packages/pip/__init__.py", line 21, in <module>
    from pip._vendor.requests.packages.urllib3.exceptions import DependencyWarning
  File "/home/emc/py36/lib/python3.6/site-packages/pip/_vendor/requests/__init__.py", line 62, in <module>
    from .packages.urllib3.exceptions import DependencyWarning
  File "/home/emc/py36/lib/python3.6/site-packages/pip/_vendor/requests/packages/__init__.py", line 29, in <module>
    import urllib3
ModuleNotFoundError: No module named 'urllib3'

在配置期间,我没有遇到任何问题:
http://pastebin.com/ePQ1awas

实际上我可以看到一些socket lib:

/home/emc/py36/lib64/python3.6/lib-dynload/_socket.cpython-36m-x86_64-linux-gnu.so

编辑:
无法导入套接字(线程相同)

>>> import _socket
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named '_socket'
>>> 
>>> 
>>> import socket
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/emc/py36/lib/python3.6/socket.py", line 49, in <module>
    import _socket
ModuleNotFoundError: No module named '_socket'

2 个答案:

答案 0 :(得分:2)

/home/emc/py36/lib/python3.6/site-packages 添加到 PYTHONPATH 解决了问题。

答案 1 :(得分:1)

使用prefix=/usr/local构建3.7.4之后,我遇到了类似的问题

修复是在.bashrc中添加两行:

export PYTHONHOME=/usr/local
export PYTHONPATH=/usr/local/lib64/python3.7/lib-dynload