4

我尝试为 Python 编译 PJSUA2。我可以设法用 Visual Studio 2015 社区版编译源代码。

我的问题是,我现在如何安装 Python 模块?

该指南建议使用 make 和 make install。我也尝试安装 minwg,但由于项目是用 VS 编译的,所以它不起作用。

我也尝试过使用 minwg 进行编译,但由于未定义的要求,我永远无法成功。官方 PJSUA 指南也推荐使用 VS for Windows。

以下设置已应用于从源代码构建:

  • Swig 位置已添加到路径中
  • 已添加 JAVA_home 系统变量
  • Java 位置已添加到路径
  • 已创建空 pjlib/include/pj/config_site.h
  • VS 2015 社区开源(已安装所有建议的 VS 包和模块)
  • 将以下项目设置为不编译:
    • pjsua_cli_uwp_comp
    • pjsua_cli_wp8
    • pjsua_cli_wp8_comp
  • 设置 swig_java_pjsua2 来构建。
  • 将以下文件夹添加到 swig_java_pjsua2 VC++ 包含目录
    • c:\Program Files\Java\jdk-11.0.2\include
    • c:\Program Files\Java\jdk-11.0.2\include\win32
  • 构建解决方案
4

2 回答 2

2

我可以制定一个解决方法来为 Python 3.7 编译 pjsua2。如果您有更好的解决方案或只是对此解决方法的建议,请告诉我

前提条件:

  • 项目清单
  • 下载并解压 swig (swigwin 4.0.0)
  • 下载并安装JDK
  • 下载并安装 Python (Python 3.7.3 x64) 并设置为自定义安装:
    • 勾选“将 Python 添加到环境变量”
    • 勾选“预编译标准库”
    • 勾选“下载调试符号”
    • 勾选“下载调试二进制文件(需要 VS 2015 或更高版本)”
    • 如果需要,设置自定义路径
    • 将 swigwin 位置添加到系统路径
    • 将 Python 位置添加到系统路径
    • 添加 JAVA_HOME 系统变量
    • 将 %JAVA_HOME%\bin 添加到系统路径
    • 安装 Visual Studio 2015 社区版

脚步:

  • 下载并解压 pjsip 2.8
  • 在 pjlib/include/pj/ 文件夹下创建空的 config_site.h
  • 在VS中打开pjproject-vs14.sln
  • 会有一个不支持的警告窗口,按 OK
  • 在“安装缺少的功能”窗口中,按安装
  • 将启动 VS 安装程序,并且必须关闭 VS 才能完成安装。
  • 我还在安装中添加了“Windows 10 SDK (10.0.10586)”。
  • 我还在 Windows 10 上启用了开发人员模式,但这可能是可选的
  • 在 VS 中再次打开项目
  • 在顶部下拉菜单中将项目设置为 Release 和 x64
  • 右键单击解决方案,然后转到配置属性> 配置
  • 从选择中删除所有与 uwp 和 wp8 相关的项目,例如 pjsua_cli_uwp_comp、pjsua_cli_wp8_comp
  • 按 OK,然后构建解决方案
  • 构建后我有 34 个成功和 0 个失败的解决方案。
  • 将以下行添加到 pjsip-apps/src/swig 文件夹中的 pjsua2.i

    %inline %{
    pj_ssize_t new_pj_ssize_t(int s) {
       return (pj_ssize_t) s;
    }
    %}
    

    这个额外的内联 swig 函数为创建记录器问题提供了解决方法

  • 打开命令行(powershell 不适用于此)
  • 转到 pjsip-apps/src/swig/python
  • 执行以下命令:

    swig -I../../../../pjlib/include -I../../../../pjlib-util/include -I../../../../pjmedia/include -I../../../../pjsip/include -I../../../../pjnath/include -py3 -c++  -python -threads ../pjsua2.i
    
  • 使用 swig_python_pjsua2 名称将新的“空项目”(Visual C++)添加到解决方案中

  • 添加 libpjproject 和 pjsua2_lib 作为对这个新项目的引用
  • 右键单击头文件>添加>现有项目...
  • 添加 pjsip-apps\src\swig\pjsua2_wrapp.h
  • 向名为“Generated Code”的项目添加“新过滤器”
  • 右键单击“生成的代码”并添加新的现有项目。
  • 添加 pjsip-apps\src\swig\pjsua2_wrapp.cxx
  • 右键单击项目和链接器>输入
  • 将“Ws2_32.Lib”添加到“附加依赖项”
  • 转到“VC++ 目录”
  • 添加以下文件夹以包含路径(我使用了完整路径!):
    • c:\python37\包括
    • pjnath\包括
    • pjsip\包括
    • pjmedia\包括
    • pjlib-util\include
    • pjlib\包括
  • 将以下文件夹添加到库目录:
    • C:\Python36\libs
  • 设置为一般:
    • 目标名称:_$(ProjectName)
    • 目标扩展名:.pyd
    • 配置类型:动态库 (.dll)
  • 转到解决方案的属性,然后选择 swig_python_pjsua2 进行构建
  • 右键单击 swig_python_pjsua2 并构建
  • 构建应该成功完成
  • 您需要归档以在 python 中使用 pjsua2 库。
  • pjsua.py 位于 pjsip-apps/src/swig/python 下
  • x64/Release/_swig_python_pjsua2.pyd(重命名为_pjsua2.pyd)
  • 要进行测试,请将它们复制到文件中,然后从同一文件夹中启动 python 并键入:
    • 导入 pjsua2
于 2019-05-19T12:19:24.217 回答
0

非常感谢 Krisz 所做的出色工作!


我刚刚让它适用于 Python 2.7 / 32bit,有些东西略有不同,所以我将在此处添加它们:

环境:

  • 视窗 10
  • SWIG 4.0.1
  • PJSIP 2.9
  • Python 2.7.14(32 位)
  • Visual Studio Express 2015(V 14.0.25431.01 更新 3)

瓦达多:

  1. 重要提示:检查您的 Python 解释器是否真的是 x64 或 win32,如下所示:启动 python 会话并输入:

    进口平台

    平台架构()

    如果您有 32 位,请在选择 VS 中的目标平台时考虑这一点。

  2. 当您将此 %inline%-Snippet 添加到 pjsip-apps/src/swig/pjsua2.i 时,请将其添加到文件末尾!

  3. 启动 swig-command 时,如果您使用 Python 2.x,请省略“-py3”参数

  4. Krisz 的描述中有一个小错字,在“pjsua.py 位于 pjsip-apps/src/swig/python 下”-> 当然是指 pjsua2.py。不要使用 pjsua.py。

最后将 _pjsua2.lib 和 pjsua2.py 复制到 \Lib\site-packages\ 并将 _pjsua2.pyd 复制到 \DLLs\ 以使它们随处可用。

于 2020-01-09T15:45:15.560 回答