Ubuntu22.04下源码编译安装pythonocc-7.8

news2024/11/16 13:54:13

Ubuntu22.04下源码编译安装pythonocc-7.8

本文介绍Ubuntu下手动编译安装pythonocc,及安装过程遇到的各种坑

基本依赖安装

sudo apt-get update
sudo apt-get install -y wget libglu1-mesa-dev libgl1-mesa-dev libxmu-dev libxi-dev build-essential cmake libfreetype6-dev tk-dev python3-dev rapidjson-dev python3 git python3-pip libpcre2-dev

安装SWIG工具

SWIG是一个用来把C/C++程序和Perl,Python,Ruby,Tcl等脚本语言连接起来的接口编译器。它的工作原理是获取C/C++头文件的声明,并使用它们生成可以访问底层C/C++代码的脚本语言

https://github.com/swig/swig

wget http://prdownloads.sourceforge.net/swig/swig-4.1.1.tar.gz
tar -zxvf swig-4.1.1.tar.gz
cd swig-4.1.1
./configure && make -j4 && make install

# 注意安装可能报错没有权限,可以使用超级管理员身份安装`sudo su`

pythonocc核心还是基于C++开发的occ库,python对c++的occ进行包装,如何包装就是使用这个SWIG库

编译构建OCC

下载 occ 7.8.1

下载到本地/home/myPC/occ/occt-bd2a789.tar.gz

cd /home/myPC/occ/
tar -zxvf occt-bd2a789.tar.gz

cd occt-bd2a789
mkdir cmake-build
cd cmake-build

开始构建,这里设置一下安装目录/opt/occ781

$ cmake -DINSTALL_DIR=/opt/occt781 -DBUILD_RELEASE_DISABLE_EXCEPTIONS=OFF ..

make -j4
sudo make install

将occ库添加到系统依赖库目录

echo "/opt/occt781/lib" >> /etc/ld.so.conf.d/occt.conf

这步可能需要权限,如提示权限问题则sudo su执行

开始安装pythonocc-core

首先下载pythonocc源码

git clone https://github.com/tpaviot/pythonocc-core.git

进入目录,开始构建

cd pythonocc-core
mkdir cmake-build && cd cmake-build

# 安装目录设置在/opt/pythonocc-core
cmake  -DOCCT_INCLbingUDE_DIR=/opt/occt781/include/opencascade  -DOCCT_LIBRARY_DIR=/opt/occt781/lib  -DPYTHONOCC_BUILD_TYPE=Release  -DPYTHONOCC_INSTALL_DIRECTORY=/opt/pythonocc-core  ..

执行后报错,发现提示需要SWIG版本不对

-- The C compiler identification is GNU 11.4.0
-- The CXX compiler identification is GNU 11.4.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found OpenGL: /usr/lib/x86_64-linux-gnu/libOpenGL.so   
-- Found Python3: /home/bing/miniconda3/bin/python3.1 (found version "3.11.5") found components: Interpreter Development Development.Module Development.Embed 
-- Python3 interpreter:/home/bing/miniconda3/bin/python3.1
-- Python include directory: /home/bing/miniconda3/include/python3.11
-- Python library release: /home/bing/miniconda3/lib/libpython3.11.so
CMake Error at /usr/share/cmake-3.22/Modules/FindPackageHandleStandardArgs.cmake:230 (message):
  Could NOT find SWIG: Found unsuitable version "4.1.1", but required is at
  least "4.2.1" (found /usr/local/bin/swig, )
Call Stack (most recent call first):
  /usr/share/cmake-3.22/Modules/FindPackageHandleStandardArgs.cmake:592 (_FPHSA_FAILURE_MESSAGE)
  /usr/share/cmake-3.22/Modules/FindSWIG.cmake:153 (find_package_handle_standard_args)
  CMakeLists.txt:113 (find_package)

解决办法:要么更新SWIG到4.2.1,要么尝试下降pythonocc源码对SWIG的依赖;最好选择更新SWIG,需要重新下载编译SWIG源码

这里偷懒,尝试修改一下pythonocc-core/CMakeLists.txt

...
########
# SWIG #
########
find_package(SWIG 4.2.1 REQUIRED)
include(${SWIG_USE_FILE})
...

4.2.1改成4.1.1 ,重新执行cmake解决报错(这里不建议这样偷懒,最好还是老老实实安装一个最新的SWIG)

继续安装

make -j4 && make install 

添加动态库目录

# 打开 ~/.bashrc 添加如下内容
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/occt781/lib
# 完了后,需要执行一下`source ./bashrc`

验证pythonocc-core是否成功安装

安装完成后,测试验证验证一下

$ python
Python 3.11.5 (main, Sep 11 2023, 13:54:46) [GCC 11.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from OCC.Core.gp import gp_Pnt
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'OCC'

由上可知,当输入 from OCC.Core.gp import gp_Pnt 提示说OCC找不到,奇了怪了,查看github官方安装文档

If PYTHONOCC_INSTALL_DIRECTORY is unset, it will be installed to site-packages/OCC;如果PYTHONOCC_INSTALL_DIRECTORY未设置,将安装到site-packages/OCC,这个目录被设置为别的目录了,当时想着这个这类目录统一安装到/opt/pythonocc-core目录,谁知道这个目录不能乱设置;

site-packages这个目录三python的第三方依赖包的目录,所以默认情况,就会放在你的python的这个目录下,在python环境下,当import时,py就能正常找到库;

显然由前面的pythonocc的cmake阶段,被简单理解指定目录了;而一般情况下是不用修改的,自动会识别到python的site-packages目录的,当我们采用的conda,有多个虚拟环境安装时,而我们又采用了手动构建编译pythonocc包时,这是就需要指定这个目录到指定的conda虚拟环境中;

如何查看当前python的第三方库目录呢,可以采用如下方式查看

# 查看一下当前使用的python
$ which python
/home/myPC/miniconda3/bin/python
# 进入python
$ python
Python 3.11.5 (main, Sep 11 2023, 13:54:46) [GCC 11.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import site
>>> print(site.getsitepackages())
['/home/myPC/miniconda3/lib/python3.11/site-packages']

现在如何解决安装路径设置错误的办法呢?一种是重新安装pythonocc-core,不指定安装目录;另外一种是创建个软链接,在当前pythonsite-packages下,创建一个/opt/pythonocc-core的软链接(前面pythonocc安装时 指定的安装路径)

$ ln -s /opt/pythonocc-core /home/myPC/miniconda3/lib/python3.11/site-packages/OCC
$ python
Python 3.11.5 (main, Sep 11 2023, 13:54:46) [GCC 11.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from OCC.Core.gp import gp_Pnt
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/bing/miniconda3/lib/python3.11/site-packages/OCC/Core/gp.py", line 164, in <module>
    from six import with_metaclass
ModuleNotFoundError: No module named 'six'

又有新的报错,我们安装一个six库

$ conda install six

再次测试pythonocc-occ

$ python
>>> from OCC.Core.gp import gp_Pnt
>>> p = gp_Pnt(1., 2., 3.)
>>> p.X()
1.0

完美跑通python-occ手动编辑安装

# 下载demo
$ git clone https://github.com/tpaviot/pythonocc-demos
$ cd pythonocc-demos/examples  
$ python core_helloworld.py

在这里插入图片描述
结束

当然,不想折腾的同学,直接看这里,conda安装occ

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1788775.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Angular17(1):使用Angular CLI创建空项目

要创建一个空的 Angular 项目&#xff0c;可以使用 Angular CLI&#xff08;命令行界面&#xff09;。以下是使用 Angular CLI 创建一个新项目的步骤&#xff1a; 1、安装 Angular CLI&#xff1a; 打开你的命令行界面&#xff08;在 Windows 上是 CMD、PowerShell 或 Git Bas…

浮点数精度问题(详细)

文章目录 1.什么是浮点数2. 二进制与十进制的转换2.1 二进制与十进制的相互转换(方法介绍&#xff0c;思维理解)2.2 在线转换工具 3.浮点数的 IEEE754 表示4.C# 浮点型float、double 、decimal 比较5.解决运算精度问题5.1 浮点数预算精度问题5.2 解决方案5.2.1 放大倍数计算5.2…

基于PHP+MySQL开发的一套游泳馆预约报名小程序开发源码模板

最近新开发了一套游泳馆线上预约报名小程序&#xff0c;其主要功能有预约功能&#xff0c;报名功能&#xff0c;支付功能&#xff0c;个人中心&#xff0c;订单管理&#xff0c;商品管理等等。 游泳馆预约报名小程序系统-运行环境 开发语言&#xff1a;PHP 数据库&#xff1a;M…

升级SVN服务器web管理工具EasyPHP17.1

1、卸载EasyPHP12.1&#xff0c;删除C盘安装路径下C:\Program Files (x86)\EasyPHP12**文件 2、安装EasyPHP-Devserver-17.0-setup&#xff0c;链接见下方官网地址 PHP DEVSERVER | LOCAL PHP DEVELOPMENT ENVIRONMENTA complete and ready-to-use PHP development environmen…

MySQL 自定义函数(实验报告)

一、实验名称&#xff1a; 自定义函数 二、实验日期&#xff1a; 2024年 6 月 1 日 三、实验目的&#xff1a; 掌握MySQL自定义函数的创建及调用&#xff1b; 四、实验用的仪器和材料&#xff1a; 硬件&#xff1a;PC电脑一台&#xff1b; 配置&#xff1a;内存&#…

LabVIEW实现汽车逆变器功能测试系统

​介绍了如何利用LabVIEW开发汽车逆变器&#xff08;包括功率板和控制板&#xff09;的自动测试设备&#xff08;ATE&#xff09;&#xff0c;实现对额定800V电压、300A电流的逆变器进行功能测试。系统通过CAN2.0通讯协议&#xff0c;实现电机控制、温度传感器监测、电压校验和…

docker一键部署EFK系统(elasticsearch filebeat kibana metricbeat es-head)

EFK日志系统搭建 EFK日志系统介绍功能需求搭建elasticsearch集群规划前提部署核对证书及权限 EFK日志系统介绍 Elasticsearch 是一个实时的、分布式的可扩展的搜索引擎&#xff0c;允许进行全文、结构化搜索&#xff0c;它通常用于索引和搜索大量日志数据&#xff0c;也可用于…

7、css3实现边框不停地跑动效果

效果例图&#xff1a; 1、上html代码&#xff1a; <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><meta …

百分之九十的人都忽视了JMeter响应断言中的这个实用功能—— Jmeter Variable Name to use

JMeter的响应断言 相信对于使用过JMeter的同学来学&#xff0c;一定都使用过响应断言&#xff0c;在这里我就不相信介绍了&#xff0c;我们可以简单的理解为&#xff1a; JMeter的响应断言是一种用于检查测试中得到的响应数据是否符合预期的工具&#xff0c;旨在保证性能测试…

挑战你的数据结构技能:复习题来袭【6】

1. (单选题)设无向图的顶点个数为n,则该图最多有&#xff08;&#xff09;条边 A. n-1 B. n(n-1)/2 C. n(n1)/2 D. 0 答案&#xff1a;B 分析&#xff1a; 2. (单选题)含有n个顶点的连通无向图,其边的个数至少为()。 A. n-1 B. n C. n1 D. nlog2n 答案&#xff1a;A…

产品经理的“高光”时刻,你中了几个?

作为产品经理&#xff0c;都有着这样一个闪闪发光的梦&#xff0c;就是看着自己的产品从0到DAU过万、过十万&#xff0c;甚至是过百万。 不过想要成为过百万的大牛&#xff0c;天时地利任何一个都不能少&#xff0c;大多数的产品经理暂时还在打怪升级攒经验。 虽然暂时体验不…

C++ STL map容器erase操作避坑

map容器的erase方法有三种重载形式&#xff1a; //1.删除迭代器所指向的元素 //返回值是指向下一个节点的迭代器 iterator erase(iterator it); //2.区间删除 iterator erase(iterator first, iterator last); //3.根据键值删除 //返回值为删除的元素个数 size_type erase(con…

企业全面管理解决方案:基于Java技术的ERP管理系统源码

功能模块与描述&#xff1a; ERP首页&#xff1a; 销售统计与采购统计&#xff1a;实时展示销售和采购金额的统计数据。折线图统计&#xff1a;通过图表直观展示销售和采购趋势。 采购管理&#xff1a; 采购订单管理&#xff1a;处理采购订单的搜索、新增、导出等。采购入库与退…

安防综合管理系统EasyCVR平台GA/T1400视图库:基于XML的消息体格式

GA/T 1400标准的应用范围广泛&#xff0c;涵盖了公安系统的视频图像信息应用系统&#xff0c;如警务综合平台、治安防控系统、交通管理系统等。在视频监控系统中&#xff0c;GA/T 1400公安视图库的对接是实现视频图像信息传输、处理和管理的重要环节。 以视频汇聚EasyCVR视频监…

即时设计工具对决:Figma、Sketch与XD的优劣比较

最近几年&#xff0c;UI 设计工具出现了许多后起之秀&#xff0c;其中有四款更具代表性的UI设计软件&#xff1a;Sketch、Adobe XD、Figma 和 即时设计&#xff0c;这四个设计软件都有自己的优势。如果合作对您的UI设计过程至关重要&#xff0c;那么Figma 和 即时设计 它应该是…

Flink SQL查询语法部分详解(提供需求、数据练习复现)

一、Hints 动态表选择&#xff1a;可以在查询表的时候动态修改表的参数配置 1、读取kafka的数据建表 CREATE TABLE students (id STRING,name STRING,age INT,sex STRING,clazz STRING ) WITH (connector kafka,topic students, -- 指定topicproperties.bootstrap.servers …

PyQt5创建与MySQL数据库集成的应用程序

最近&#xff0c;对之前的mysql管理系统进行了更新升级&#xff0c;制作了一版关于车牌的管理系统&#xff01; &#xff08;1&#xff09;实现了对车牌和用户基本信息的增删改查的功能 &#xff01; &#xff08;2&#xff09;加入了对数据库的刷新和状态显示功能 &#xff…

Windows下载安装RabbitMQ客户端(2024最新篇)

文章目录 RabbitMQ认知RabbitMQ下载RabbitMQ安装 更多相关内容可查看 RabbitMQ认知 定义&#xff1a;RabbitMQ是一个消息中间件&#xff0c;它接受并转发消息。你可以把它当做一个快递站点&#xff0c;当你要发送一个包裹时&#xff0c;你把你的包裹放到快递站&#xff0c;快递…

详解MyBatis(三)

目录 1.#{} 和 ${} 1.1#{} 和${} 使用 Integer类型参数 String类型参数 1.2#{} 和 ${}区别 1.2.1#{}性能更高&#xff08;预编译&#xff09; 1.2.2#{}更安全&#xff08;防止SQL注入&#xff09; 1.3排序功能 1.4like查询 2.数据库连接池 2.1连接池介绍 2.2更换连接池…

http接口上传文件响应413:413 Request Entity Too Large

目录 一、场景简介二、异常展示三、原因四、解决 一、场景简介 1、服务端有经过nginx代理 2、上传文件超过5M时&#xff0c;响应码为413 3、上传文件小于5M时&#xff0c;上传正常 二、异常展示 三、原因 nginx限制了上传数据的大小 四、解决 扩大nginx上传数据的大小 步…