.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 , 执行结果如下图所示: