Python3中.pyd文件介绍

      .pyd文件是用Python编写生成的动态链接库,包含一个或多个Python modules,可以被其它Python代码调用。

      以下是.pyd的生成及调用测试:
      通过conda创建虚拟环境Python_Test,将终端定位到Python_Test目录下,依次执行如下命令:

conda create -n Python_Test python=3.8
conda activate Python_Test
pip install -r requirements.txt

      requirements.txt内容如下:

matplotlib
pymongo
scipy
imageio
opencv-python
Cython

      demo/pyd目录下addr.py内容如下:

from inspect import currentframe, getframeinfo

def get_addr(label):
    if label == "csdn":
        return "https://blog.csdn.net/fengbingchun/"
    elif label == "github":
        return "https://github.com/fengbingchun"
    else:
        print("#### FileName: %s, Line Number: %d, label: %s" % (getframeinfo(currentframe()).filename, getframeinfo(currentframe()).lineno, label))
        raise Exception("Error: Unsupported address")

      demo/pyd目录下setup.py内容如下:

from setuptools import setup
from Cython.Build import cythonize

setup(
    name="get csdn or github addr",
    ext_modules=cythonize("addr.py")
)

      将终端定位到demo/pyd,执行:

python setup.py build_ext --inplace

      执行结果如下图所示:在pyd目录下会生成addr.cp38-win_amd64.pyd, addr.c文件和build目录,其中addr.cp38-win_amd64.pyd文件是我们需要的

     调用addr.cp38-win_amd64.pyd的测试代码test_pyd.py内容如下:

import addr

def print_addr():
    print("csdn addr:", addr.get_addr("csdn"))
    print("github addr:", addr.get_addr("github"))
    print("other addr:", addr.get_addr("other"))

if __name__ == "__main__":
    print_addr()
    print("test finish")

      将addr.cp38-win_amd64.pyd拷贝到虚拟环境Python_Test所安装目录的DLLs目录下,这里为D:\ProgramFiles\Anaconda3\envs\Python_Test\DLLs, 否则会报error: ModuleNotFoundError: No module named 'addr' 

      将终端定位到Python_Test目录下,执行:python demo/test_pyd.py , 执行结果如下图所示:

      GitHubhttps://github.com/fengbingchun/Python_Test

猜你喜欢

转载自blog.csdn.net/fengbingchun/article/details/129765302