为什么CPython 3.4.3不能导入'_socket'模块?

时间:2016-02-16 09:13:32

标签: python c++ sockets python-import cpython

我有一个C ++程序,它有一个嵌入式python 3.4.3+。我正在尝试运行一个使用名为requests的模块的脚本,此模块依赖于socket,但嵌入式解释器无法导入_socket

Python版本和Callstack

3.4.3+ (3.4:f4cd9ac378d7+, Feb 16 2016, 21:24:03) [MSC v.1800 32 bit (Intel)]
Traceback (most recent call last):
  File "<project path>\client_example.py", line 30, in <module>
    import requests
  File "F:\Python 3.4.3\lib\site-packages\requests\__init__.py", line 58, in <module>
    from . import utils
  File "F:\Python 3.4.3\lib\site-packages\requests\utils.py", line 12, in <module>
    import cgi
  File "F:\Python 3.4.3\Lib\cgi.py", line 39, in <module>
    from email.parser import FeedParser
  File "F:\Python 3.4.3\Lib\email\parser.py", line 12, in <module>
    from email.feedparser import FeedParser, BytesFeedParser
  File "F:\Python 3.4.3\Lib\email\feedparser.py", line 27, in <module>
    from email import message
  File "F:\Python 3.4.3\Lib\email\message.py", line 16, in <module>
    from email import utils
  File "F:\Python 3.4.3\Lib\email\utils.py", line 29, in <module>
import socket
  File "F:\Python 3.4.3\Lib\socket.py", line 49, in <module>
    import _socket
ImportError: No module named '_socket'

我也知道_socket.pyd位于python安装位置的DLL中,但我不知道它是否也应该位于其他位置。

如何让程序的嵌入式解释器找到_socket模块?

3 个答案:

答案 0 :(得分:0)

您是否尝试打开python终端并加载套接字库? (即&#34;导入套接字&#34;) 我看到你正在使用MSVC,这意味着你正在使用Windows。要打开python终端,请打开命令提示符,然后输入python并按Enter键。你现在在python终端。

如果这不起作用,那么python安装就会出现问题。

另一件事,如果您使用适当的python安装程序安装python,问题很可能不是由于安装错误。

最好的问候。

答案 1 :(得分:0)

尝试将模块的路径添加到python:

sys.path.append(path/to/module)

这应该允许您导入模块。

答案 2 :(得分:0)

这是在 VS 2019 中调试我的c ++应用程序时发生的。

因为Python缺少调试编译文件: _d .dll _d .pyd * d _ .lib

解决方案:

  1. 下载源代码并构建您的调试版本 Debug Version Build
  2. 从。\ PCbuild \ amd64复制到您的python目录

    • * ._ d.dll ==>。\%PYTHONHOME%\
    • * ._ d.pyd ==>。\%PYTHONHOME%\ DLLs
    • * ._ d.pdb ==>。\%PYTHONHOME%\ DLLs
    • * ._ d.lib ==>。\%PYTHONHOME%\ libs
  3. 设置环境变量%PYTHONHOME%%PYTHONPATH%

  4. 将路径添加到sys.path

    PyObject* sys_path = PySys_GetObject("path");
    retVal = PyList_Append(sys_path, PyUnicode_FromString("C:\\Python38_64\\DLLs"));
    
  5. 再次尝试调试;-)