一般python导入的文件格式均为.py文件,但是在复现一篇论文结果时遇见作者import了一个.pyx文件,由于服务器环境出了问题,目前用的是windows的深度学习环境,所以一直提示No mudules…
查找了很多博客后发现windows平台必须将.pyx格式转换为.pyd才可以使用,经过实践发现完美解决了问题,
主要记录一下一些遇到的错误解决方法,因此本文未改动原作者文字与代码
原文链接:https://blog.csdn.net/qq_41185868/article/details/100108507
第一步,编写转换代码。保存为PyxConvertPyd.py
#!/usr/bin/python
# Run as:
# python PyxConvertPyd.py build_ext --inplace
import sys
import numpy as np
A=sys.path.insert(0, "..")
from distutils.core import setup
from distutils.extension import Extension
from Cython.Build import cythonize
from Cython.Distutils import build_ext
# ext_module = cythonize("TestOMP.pyx")
ext_module = Extension(
"bbox",
["bbox.pyx"], #更改为自己想要转换的.pyx文件
extra_compile_args=["/openmp"],
extra_link_args=["/openmp"],
)
setup(
cmdclass = {'build_ext': build_ext},
ext_modules = [ext_module],
#注意这一句一定要有,不然只编译成C代码,无法编译成pyd文件
include_dirs=[np.get_include()]
)
第二步,执行命令进行转换
python PyxConvertPyd.py build_ext --inplace
然后即可得到.pyd文件,直接import即可。
原文链接:https://blog.csdn.net/liao392781/article/details/80496060
例如目录结构如下
一、a.py 要 import dir目录下的 b.py 文件。
a.py代码如下:
# coding=utf-8
"import dir 目录下的 b.py 文件"
import dir.b
print dir.b.name
执行 a.py 报错
提示找不到这个模块的名字 dir.b 。通过查找官方文档,发现要包含目录下的文件时需要在目录下声明一个__init__.py文件,即使这个文件是空的也可以。当然这个文件也可以初始一些数据。
于是在 dir 下新建 init.py文件,目录结构如下
二、b.py 要 import test目录下的 a.py 文件。
这个时候需要使用到sys模块,b.py文件内容如下:
# coding=utf-8
"import dir 目录下的 b.py 文件"
import sys
sys.path.append('..')
import a
陕西省西安市沙坡村职业技术学院
2019年10月17日