一些软件的使用

记录一些软件的使用技巧方法

  • 2. Git
    • 2.1 git基础
      • 2.1.1 git帮助
      • 2.1.2 获取 Git 仓库
      • 2.1.3 记录每次更新到仓库
    • 2.2 远程仓库
  • 3. Docker
    • 3.1 基础
    • 3.1 手把手操作(使用vscode)
    • 3.2 Docker使用中的一些问题
  • 4. linux
  • 5. ROS
  • 6. 代码可视化——doxygen+graphviz
  • 7.CoreDump的使用
  • 8. PyCharm
  • 9. GPU训练
  • 10. 标定工具
    • 10.1 [OpenCV C++ Stereo Camera Calibration](https://github.com/sourishg/stereo-calibration)
    • 10.2 [kalibr](https://github.com/ethz-asl/kalibr/wiki)
    • 多相机标定
  • matplotlib
    • 问题与解决
  • 11. linux下一些小工具
  • 12. win tools
  • 13. python
    • Cpython

2. Git

什么是git
git中数据中数据的状态

  • git使用前的配置
    git clone --global user.name "name"
    git clone --global user.email [email protected]
    # 带--global参数的命令配置的是全局变量,可用于以后所有项目;
    # 对特定项目使用不同用户名与邮件地址时,在所在项目目录下重新运行不带--global的命令来覆盖
    # 配置文件及优先级:~/.gitconfig > /etc/gitconfig
    git config --list --show-origin #查看所有配置及所在文件
    git config --list #查看所有配置
    
  • 初始化已有项目为仓库
cd project/
git init # 初始化
git add *.c #指定追踪所有.c文件
git add LICENSE
git commit -m ''

命令:

git add file # 跟踪或暂存文件
git status # 查看文件状态
git status -s/--short # 以简洁方式查看文件状态
git diff # 查看未暂存的文件更新的部分(比较当前文件与暂存区快照间差异)
git diff --staged/--cached # 查看已暂存未提交文件的更改(比较已暂存文件与最后一次提交文件间的差异)
git commit # 提交更新,会自动打开默认编辑器填写提交消息
git commit -m "提交消息" # 在命令中填写提交消息
git commit -a # 跳过暂存步骤,将所有已跟踪的文件自动暂存后一并提交
git commit --amend #补充提交
git reset HEAD 文件 # 取消对文件的暂存
git checkout -- 文件 # 取消对文件的修改
git rm 文件 # 从跟踪清单中删除文件,并从工作目录中也删除
git rm --cached 文件 # 从暂存区及仓库中删除文件,但保留工作目录中的文件
git mv file_src file_to # 移动文件或改名
git log # 查看提交历史
git log -p/--patch -2 # 显示最近两次提交所引入的差异
git log --pretty=oneline # 将每一次提交的sha校验和、提交信息显示在一行内
###################################################
git clone 仓库地址 # 克隆仓库,自动将其添加为远程仓库,并默认具有简称origin
git remote (-v) # 显示已配置的远程仓库服务器的简称,-v显示其对应的URL
git remote add shortname url # 添加远程仓库url,并指定简称shortname
git fetch url/shortname # 从远程仓库拉取工作目录中没有的数据,只下载不合并,不改变工作目录文件
git pull
git push <remote> <branch> # 推送到服务器,可以是url或简称
git remote show <remote> # 显示远程仓库信息
git remote rename name_src name_to # 修改远程仓库的简称
git remote remove/rm name # 删除一个远程仓库
git tag (-l/--list) # 列出已有标签
git tag -a v1.4 -m "a message for tag" # -a创建一个标签,-m为该标签附加信息
git tag v1.4-lw # 后缀-lw为轻量标签,不需指定-a -s -m 等选项
git tag -a v1.2 9fceb02 # 在后期为之前的提交补充tag,命令末尾为指定提交的校验和或部分校验和,
						# 校验和可使用git log --pretty=oneline得到
git show v1.4 # 显示指定标签的提交信息
git push <remote> <tag> # 将标签推送到服务器上(git push 默认不同步tag)
git push <remote> --tags # 将所有不在远程仓库中的tag同步过去
git tag -d <tag> # 删除本地仓库的tag
git push <remote> --delete <tag> # 删除远程仓库中的标签
######################################################
git branch branch_name # 创建分支,但不自动切换
git log --oneline --decorate # --decorate显示各个分支当前所指的对象
git checkout branch_name # 切换分支
git branch -b branch_name_1 # 创建并切换到分支1
git checkout master # 切换到master分支
git merge branch_name_1 # 将branch_name_1合并到master,
						# 若branch_name_1为master的推进,则该合并会将master向后推进
git branch -d branch_name_1 # branch_name_1内容已经合并到master,-d 将其删除

使用.gitignore文件忽略文件


简单应用

  1. 终端输入git --version确认已安装git
  2. 设置身份标识
    $ git config --global user.email "邮箱"
    $ git config --global user.name "用户名"
    # 如果仅在本仓库设置身份标识,则省略 --global 参数。
    
  3. 创建工程目录
    $ git init project_name
    $ cd project_name
    
  4. 创建文件 file1.txt
  5. 添加该文件进行版本控制
    $ git add file1.txt
    # add只是暂时将文件标记,用于接下来的提交
    
  6. 提交
    $ git commit -m "My first commit"
    # -m 用于添加一条提交信息,用于描述文件活动记录
    

2.1 git基础

2.1.1 git帮助

```
$ git <命令> --help #获取<命令>的手册
$ git <命令> -h         #获取<命令>的简明手册
```

2.1.2 获取 Git 仓库

  1. 在已存在目录中初始化仓库
    $ cd /home/user/my_project
    $ git init
    $ git add *.c
    $ git add LICENSE
    $ git commit -m 'initial project version'
    
  2. 从其它服务器 克隆 一个已存在的 Git 仓库
    $ git clone https://github.com/libgit2/libgit2 mylibgit
    

2.1.3 记录每次更新到仓库

  • 对真实项目 Git 仓库的维持

    1. 从这个仓库中检出了所有文件的 工作副本
    2. 对这些文件做些修改
    3. 当完成了一个阶段的目标,想要将记录下它时,就将它提交到到仓库
  • 工作目录下的文件状态
    工作目录下的文件分为两种状态:已跟踪 或 未跟踪
    已跟踪的文件是指那些被纳入了版本控制的文件,存在于上次快照的记录中,它们的状态又可分为:未修改已修改已放入暂存区未跟踪文件,不存在于上次快照的记录中。
    一些软件的使用_第1张图片

Figure 文件的状态变化周期
  • 跟踪暂存文件

    $ git add  #跟踪新文件、暂存已修改的文件
    
  • 查看文件状态

    $ git status  #查看哪些文件处于什么状态
    
    $ git status -s #状态简览
       M README                      #已修改,未暂存
    MM Rakefile                      #已修改,暂存后又作了修改
    A      lib/git.rb                    #新添加到暂存区
    M     lib/simplegit.rb      #已修改,已暂存
    ??    LICENSE.txt              #新添加的未跟踪文件
    ------------------------------
    # 输出标记有两栏,左栏为已暂存,右侧为未暂存,??为未跟踪
    
  • 提交更新

    $ git commit  #提交更新,自动启动你选择的文本编辑器来输入提交说明
    $ git commit -m "提交说明"
    $ git commit -a "提交说明"    #跳过 git add 步骤,把所有已经跟踪过的文件暂存起来一并提交
    
  • 移除文件

  1. 在本地删除,且在暂存区(或git仓库)删除
    $ rm PROJECTS.md
    $ git rm PROJECTS.md
    
  2. 保留本地文件,删除在暂存区(或git仓库)中的文件
    $ git rm --cached README   #使用 --cached 选项,只删除暂存区缓存
    $ git rm log/\*.log                    #glob模式,删除log/ 目录下扩展名为 .log 的所有文件
    
  • glob 模式## 1.5 远程控制软件
    teamviwer速度较慢,推荐用向日葵
#官网下载向日葵deb包,安装
$sudo apt install ...deb
#解决win10远程控制ubuntu失败,显示「连接已断开」的问题
$sudo apt-get update
$sudo apt-get upgrade
$sudo apt install lightdm
#选择lightdm
#重启电脑

指 shell 所使用的简化了的正则表达式。
星号(*)匹配零个或多个任意字符;
[abc] 匹配任何一个列在方括号中的字符 (这个例子要么匹配一个 a,要么匹配一个 b,要么匹配一个 c);
问号(?)只匹配一个任意字符;
如果在方括号中使用短划线分隔两个字符,表示所有在这两个字符范围内的都可以匹配(比如 [0-9] 表示匹配所有 0 到 9 的数字);
使用两个星号(**)表示匹配任意中间目录,比如 a/**/z 可以匹配 a/z 、 a/b/z 或 a/b/c/z 等。

  • 移动(重命名)文件

    $ git mv file_from file_to
    # 相当于运行如下三条命令
    $ mv README.md README
    $ git rm README.md
    $ git add README
    
  • 忽略文件
    创建一个名为 .gitignore 的文件,列出要忽略的文件的模式。文件内容举例:

    # 忽略所有的 .a 文件
    *.a
    
    # 但跟踪所有的 lib.a,即便你在前面忽略了 .a 文件
    !lib.a
    
    # 只忽略当前目录下的 TODO 文件,而不忽略 subdir/TODO
    /TODO
    
    # 忽略任何目录下名为 build 的文件夹
    build/
    
    # 忽略 doc/notes.txt,但不忽略 doc/server/arch.txt
    doc/*.txt
    
    # 忽略 doc/ 目录及其所有子目录下的 .pdf 文件
    doc/**/*.pdf
    

2.2 远程仓库

远程仓库是指托管在因特网或其他网络中的你的项目的版本库。远程仓库可以在你的本地主机上。
fork 在自己的远程仓库创建别人仓库的副本
clone 在自己的本地创建远程仓库的副本
push 将自己本地的更新上传到远程代码并合并
pull 从远程获取代码并合并本地的版本。
pull request 将自己远端修改的内容申请同步到原来的那个别人的远端仓库
fetch 将远端更新的内容更新到本地

3. Docker

Docker 菜鸟教程
(官方)Ubuntu安装Docker
(官方)Docker Get Started
(官方)Docker doc
docker-从入门到实践

3.1 基础

#拉取一个image
#使用image启动一个container
cd image_path
bash docker/scripts/dev_start.sh
#进入一个container
bash docker/scripts/dev_into.sh
#在container外获取containerID
docker ps
#在container内获取container ID
cat /proc/self/cgroup | head -1
#或
cat /proc/self/cpuset 
#关闭一个container
docker stop container_name/container_ID
#Docker容器向宿主机传送文件
docker cp container_id:<docker容器内的路径> <本地保存文件的路径>
#宿主机向Docker容器传送文件
docker cp 本地文件的路径 container_id:<docker容器内的路径>

3.1 手把手操作(使用vscode)

来源

  1. 获取应用程序
    Download the App contents,注意只需要app文件夹
    下载->提取->使用vscode打开

  2. 构建应用的容器镜像
    Dockerfile :一个基于文本的指令脚本,用于创建容器映像
    在文件 package.json 所在的文件夹中创建一个名为 Dockerfile 的文件,内容如下:

    # syntax=docker/dockerfile:1
    FROM node:12-alpine
    RUN apk add --no-cache python g++ make
    WORKDIR /app
    COPY . .
    RUN yarn install --production
    CMD ["node", "src/index.js"]
    -----------------------------------------
    # FROM node:12-alpine:从"node:12-alpine" image开始构建,但当前机器上并没有,因此会下载一系列"node:12-alpine" image的layer image
    # WORKDIR:设置工作目录
    # COPY:复制源路径的所有元数据到工作目录,注意此处的两个点之间有个空格
    # apk:软件包管理工具;
    ## add:安装PACKAGES并自动解决依赖关系;
    ## --no-cache:不使用本地缓存安装包数据库,直接从远程获取安装包信息安装
    # 使用yarn安装信赖项
    # CMD:设置默认参数
    

    在Dockerfile所在的文件夹下打开终端,执行

    $ docker build -t getting-started .
    # 该指令使用Dockerfile构建一个新的container image. 
    # -t 将image命名为getting-started
    # 最后的点为dockerfile所在目录
    
  3. 启动一个app容器

    $ docker run -dp 3000:3000 getting-started
    # 启动getting-started
    # -d: 后台运行容器,并返回容器ID;
    # -p: 指定端口映射,格式为:主机(宿主)端口:容器端口
    

    几秒钟后,打开 Web 浏览器访问http://localhost:3000。将会看到应用程序。

3.2 Docker使用中的一些问题

  • docker权限问题

    docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/create": dial unix /var/run/docker.sock: connect: permission denied. See 'docker run --help'.
    -----------------------------------------------
    解决方法:
    # 创建组
    $ sudo groupadd docker
    # 列出组用户
    $ groups
    # 将登陆用户加入到docker用户组中
    $ sudo gpasswd -a $USER docker
    或
    $ sudo usermod -aG docker $USER
    # 更新用户组
    $ newgrp docker
    # 列出组用户(验证)
    $ groups
    
    对于vscode问题
    current user does not have permission to run 'docker'.try adding the user to the 'docker' group
    # 需要重启ubuntu
    --------------------------------------------------
    

    参考
    How to Fix Docker Permission Denied Error on Ubuntu
    解决Ubuntu18.04启动Docker“Got permission denied while …
    把用户添加进Docker用户组

  • docker内走代理
    在docker中有些操作需要在github上下载一些东西,但老是失败,可以走代理解决。
    如apollo build时,rules_swift下载失败影响编译。
    参考快速设置 Docker 的三种网络代理配置

    # 创建目录
    mkdir ~/.docker
    # 创建配置文件
    touch ~/.docker/config.json
    # 编辑配置文件
    vim ~/.docker/config.json
    
    {
     "proxies":
     {
       "default":
       {
         "httpProxy": "http://127.0.0.1:7890",
         "httpsProxy": "http://127.0.0.1:7890",
         "noProxy": "*.test.example.com,.example2.com,127.0.0.0/8"
       }
     }
    }
    
    sudo systemctl restart docker
    

4. linux

  1. 导出命令的man手册
    利用 col -b 命令去除掉所有 控制符
    $ man [command] | col -b > /root/[command].man
    
  2. 系统启动性能分析
    #按照每个单元花费的启动时间从多到少的顺序,列出所有当前正处于活动(active)状态的单元:
    systemd-analyze blame 
    #显示系统bootup各阶段用时:
    systemd-analyze time
    
    启动未完成时,会返回
    Bootup is not yet finished. Please try again later.
    
    使用以下命令可查看仍在运行的服务:
    systemctl list-jobs
    
  3. fstrim.service:回收未使用块

5. ROS

ROS Tutorials
解决ROS系统 rosdep update超时问题的新方法

  1. 更改包名、节点名
    答:共5处要改:CmakeLists.txt、package.xml、node对应的cpp文件中节点初始化语句、文件夹名及其他一些.sh/.rviz文件(若有的话)。

6. 代码可视化——doxygen+graphviz

参考:生成C++调用流程图
              Ubuntu中使用doxygen+graphviz
              理解一个功能包集的正确方法——如何使用Doxygen + Graphviz理解ros的navigation功能包集
              很详细,推荐:Doxygen + Graphviz windows下图解安装与配置
              Doxygen + graphviz + Windows Help Workshop生成函数调用图和chm文件
              其他:在windows平台上,VS Studio有叫code graph的插件,github链接

安装

sudo apt install doxygen doxygen-gui
sudo apt install graphviz graphviz-doc

使用

  1. 启动:$ doxywizard
  2. 指定doxygen运行工作目录
  3. Wizard->Project:指定工程名、工程源码路径、生成文件目录;勾选Scan recursively
  4. Wizard->Mode指定源码输出的模式:勾选All Entities;选择编程语言C++
  5. Wizard->Output选择输出文件的格式:q勾选prepare for compressed HTML(.chm).
  6. Wizard->Diagrams:选择Graphviz为生成图表的软件包
    勾选Call graphs、Called by graphs
  7. Expert->Build:勾选前6个
  8. Expert->Dot:
    勾选CLASS_DIAGRAMS、UML_LOOK
    DOT_IMAGE_FORMAT选gif
    DOT_PATH为/usr/bin/dot
  9. Run->Run Doxygen
  10. show HTML output打开网页:${doxygen}/output/html/index.html

7.CoreDump的使用

参考:
Linux Core Dump
Linux上Core Dump文件的形成和分析
core(5) — Linux 手册页
打开coredump并修改文件生成路径
Shell脚本———— /dev/null 2>&1详解
linux中core dump开启使用教程【转】

8. PyCharm

  • PyCharm 加载已有的虚拟环境
  1. File -> Settings -> Project -> Project Interpreter -> ⚙️->add
    一些软件的使用_第2张图片
  2. Virtualenv Environment -> Existing environment -> ...
    一些软件的使用_第3张图片
  3. 选择已有的虚拟环境下bin中的python可执行文件
    一些软件的使用_第4张图片
  4. Make availabale to all projects

9. GPU训练

参考
GPU之nvidia-smi命令详解
深度学习PyTorch,TensorFlow中GPU利用率较低,CPU利用率很低,且模型训练速度很慢的问题总结与分析
Pytorch GPU内存占用很高,但是利用率很低
深度学习训练已经停止了,可GPU内存还在占用着,怎么办?
解决GPU显存未释放问题
训练时GPU显存太小问题、batchsize 的大小跟GPU的显存的关系
训练神经网络时如何确定batch size?
神经网络中Batch Size的理解
深度学习中Epoch、Batch以及Batch size的设定

10. 标定工具

10.1 OpenCV C++ Stereo Camera Calibration

可标定单双目相机,依赖安装:opencv、sudo apt-get install libpopt-dev
标定文件详述

10.2 kalibr

  • 下载后:
    1. kalibr/Schweizer-Messer/sm_python/python/sm/PlotCollection.pyNavigationToolbar2Wx改为NavigationToolbar2WxAgg
    2. 修改kalibr/python/kalibr_camera_calibration/MulticamGraph.py at line 83isGraphConnected(self)函数为:
      def isGraphConnected(self):
          if self.numCams == 1:
              # Since igaph 0.8, adhesion correctly returns 0 for the non-connected one cam case.
              # which evaluates to false later on. So we skip the check and return true in the one camera case.
              return True
          else:
              #check if all vertices are connected
              return self.G.adhesion()
      
    3. sudo apt install python-igraph
      

安装很简单,catkin_make即可

多相机标定

  • 信息采集

    1. 下载标定板;
    2. 启动相机ros节点;
    3. 使用topic_tools包中的throttle工具降低相机流的频率到 4 Hz 左右;
      rosrun topic_tools throttle messages /imsee/image/left 4.0 /left
      rosrun topic_tools throttle messages /imsee/image/left 4.0 /right
      
    4. 开始录rosbag;
      rosbag record /imsee/image/camera_info /left /right -o imsee_calib.bag
      
    5. 固定摄像机系统,在摄像机前移动(左右、上下、前后、扭转 <——> x, y, size, skew)标定板,得到标定图像;
  • 标定

    rosrun kalibr  kalibr_calibrate_cameras  \
    			--target "april_6x6.yaml" \
    			--bag "static.bag" \
    			--models pinhole-equi pinhole-equi omni-radtan omni-radtan \
    			--topics /cam0/image_raw /cam1/image_raw /cam2/image_raw /cam3/image_raw \
    			 --approx-sync 0.1
    

    –bag filename.bag
      包含数据的ROS包
    –topics TOPIC_0 … TOPIC_N
      相机话题列表,与–models 的顺序对应
    –models MODEL_0 … MODEL_N
      相机/失真模型列表,与–topics 的顺序对应(请参阅支持的模型)
      支持的相机投影模型:
        pinhole camera model (pinhole)       ——>(intrinsics vector: [fu fv pu pv])
        omnidirectional camera model (omni)  ——>(intrinsics vector: [xi fu fv pu pv])
        double sphere camera model (ds)     ——>(intrinsics vector: [xi alpha fu fv pu pv])
        extended unified camera model (eucm)——>(intrinsics vector: [alpha beta fu fv pu pv])
        内参向量中的参数:
          fu, fv:    focal-length
          pu, pv:    principal point
          xi:      mirror parameter (only omni)
          xi, alpha:   double sphere model parameters (only ds)
          alpha, beta:  extended unified model parameters (only eucm)
      支持的畸变模型:
        radial-tangential (radtan) ——>(distortion_coeffs: [k1 k2 r1 r2])
        equidistant (equi)      ——>(distortion_coeffs: [k1 k2 k3 k4])
        fov (fov)         ——>(distortion_coeffs: [w])
        none (none)        ——>(distortion_coeffs: [])
    –target target.yaml
               校准用标定板配置(参见此处)
    棋盘格配置:
    target_type: ‘checkerboard’ #gridtype
    targetCols: 6 #number of internal chessboard corners
    targetRows: 7 #number of internal chessboard corners
    rowSpacingMeters: 0.06 #size of one chessboard square [m]
    colSpacingMeters: 0.06 #size of one chessboard square [m]

  • 执行标定时出现的问题

参考
kalibr 标定双目相机
package ‘igraph’ is deprecated #466
Cameras are not connected through mutual observations #364
相机标定

matplotlib

教程
中文教程
基础知识:
The matplotlibrc file
配置文件matplotlibrc详解

查看配置文件路径

import matplotlib
matplotlib.matplotlib_fname()
matplotlib.get_cachedir()   #缓存目录
matplotlib.get_configdir()  #配置目录
matplotlib.get_data_path()  #数据路径

问题与解决

  • >> GTK+ 2.x symbols detected. Using GTK+ 2.x and GTK+ 3 in the same process is not supported.
    >> Failed to load module "canberra-gtk-module"
    
    报错复现:
    import cv2
    import matplotlib.pyplot as plt 
    cv2.namedWindow("test")
    
    解决办法:更改backend

    GTKAgg GTKCairo GTK3Agg GTK3Cairo MacOSX Qt4Agg Qt5Agg TkAgg WX WXAgg Agg Cairo GDK PS PDF SVG

11. linux下一些小工具

  • 剪贴板工具CopyQ
    不太好用
    首选项->快捷键->显示托盘菜单->Alt+v,并设置自启动
    以后使用时,使用Ctrl+C多次复制文本,使用Alt+V打开跟踪历史
  • 重命名工具pyrenamer
  • 远程控制软件
    teamviwer速度较慢,推荐用向日葵
    #官网下载向日葵deb包,安装
    $sudo apt install ...deb
    #解决win10远程控制ubuntu失败,显示「连接已断开」的问题
    $sudo apt-get update
    $sudo apt-get upgrade
    $sudo apt install lightdm
    #选择lightdm
    #重启电脑
    

12. win tools

  • Bitcomets

    https://lanzoux.com/b01ihw9wf【密码:1234】
    https://www.cometbbs.com/
    # tracker: 
    https://gitee.com/harvey520/www.yaozuopan.top/raw/master/blacklist.txt
    https://trackerslist.com/all.txt
    
  • 期刊、文献

    address -
    paperdigest 文献检索、综述
    openknowledgemaps 文献检索、map分类索引
    connectedpapers 以图浏览相关文献
    中文分词+文章重写工具
    文章重写者
    paraphraser 文章重写
    nounplus 在线语法检查

#13. media tools
无影工厂,备份(已隐藏)

13. python

Cpython

  1. 基础

    .pxd文件
    .pxd 文件是由 Cython 编程语言 “编写” 而成的 Python 扩展模块头文件。
    .pxd 文件类似于 C 语言的 .h 头文件,.pxd 文件中有 Cython 模块要包含的 Cython 声明 (或代码段)。
    .pxd 文件可共享外部 C 语言声明,也能包含 C 编译器内联函数。.pxd 文件还可为 .pyx 文件模块提供 Cython 接口,以便其它 Cython 模块可使用比 Python 更高效的协议与之进行通信。
    可用 cimport 关键字将 .pxd 文件导入 .pyx 模块文件中。

    .pyx文件
    .pyx 文件是由 Cython 编程语言 “编写” 而成的 Python 扩展模块源代码文件。
    .pyx 文件类似于 C 语言的 .c 源代码文件,.pyx 文件中有 Cython 模块的源代码。
    不像 Python 语言可直接解释使用的 .py 文件,.pyx 文件必须先被编译成 .c 文件,再编译成 .pyd (Windows 平台) 或 .so (Linux 平台) 文件,才可作为模块 import 导入使用

    .pyd文件
    .pyd 文件是非 Python,由其它编程语言 “编写-编译” 生成的 Python 扩展模块。
    Python 要导入 .pyd 文件,实际上是在 .pyd 文件中封装了一个 module。在 python 中使用时,把它当成 module 来用就可以了,即:“import 路径名.modulename” 即可,路径名为 .pyd 文件所在的路径。
    Python的.py与Cython的.pxd.pyx.pyd 文件格式之间的主要区别

  2. 关于 .pyx文件的编译和导入

    from distutils.core import setup
    from Cython.Build import cythonize
    setup(      
    	name = 'dtw',
    	ext_modules=cythonize('./dtw.pyx')
    )
    
    from distutils.core import setup
    from Cython.Build import cythonize
    import numpy as np
    setup(
    	name = 'dtw',
    	ext_modules=cythonize('./dtw.pyx'),
        include_dirs=[np.get_include()]
    )
    
    #注意此处python版本要和工程所用一致	
    python3  setup.py build_ext --inplace
    
    import pyximport
    pyximport.install()
    import dtw
    
  3. python使用ctypes调用第三方库时出现undefined symbol分析

你可能感兴趣的:(vscode,git)