【问题标题】:Is it possible to include .pyx in a file.py是否可以在 file.py 中包含 .pyx
【发布时间】:2020-07-31 13:04:03
【问题描述】:

我在python中有一个函数,它是3个for循环来做一些计算。它非常慢,所以我寻找加速我的 Python 代码的解决方案,我发现 Cython 是一种加速 Python 代码的方法。我在笔记本中编写了 Cython 函数,它运行良好,所以我想将它包含到我现有的项目中,但现在我无法将此函数导入其他要调用的文件中。我试着这样做method

import pyximport
pyximport.install()
from my module import function_a, function_b

但它仍然给我以下错误:ModuleNotFoundError: No module named 'my_module'

我正在运行 Python 3.8.3 和 Cython 0.29.21

我的文件夹结构如下

文件夹

  • my_module.pyx
  • where_I_want_to_call.py

【问题讨论】:

  • 如果没有minimal reproducible example,就不可能知道哪里出了问题(例如,在您的代码中,它是“我的模块”而没有“_”,所以这可能是个问题)。 py 和 pyx 文件所在的文件夹结构是什么?
  • 我编辑了我的问题以查看文件夹结构和文件名。

标签: python cython


【解决方案1】:

文件结构:

PS C:\Users\adeee\Desktop\test> tree /F
C:.
    ip.pyx
    test.py

所以你可以看到我有我运行的主要test.py 文件。我还有一个ip.pyx 文件,我从中导入check_ip 函数。

也许您的代码中有某种拼写错误。我可以看到你有

from my module import function_a, function_b

但你应该有:

from my_module import function_a, function_b

包含_ 符号很重要。

代码:

test.py

import pyximport
pyximport.install()
import ip

if __name__ == '__main__':
    ip.check_ip('192.168.1.1')

ip.pyx

import ipaddress

def check_ip(user_ip):
    try:
        ip = ipaddress.ip_address(user_ip)
        print(f'{ip} is correct. Version: IPv{ip.version}')
    except ValueError:
        print('Adress is invalid')

输出:

Generating code
Finished generating code
192.168.1.1 is correct. Version: IPv4

决赛:

在导入任何*.pyx 模块之前,您必须导入pyximport 模块并运行pyximport.install() 方法。运行这两个命令后,你应该有一个导入的模块,就像一个普通的*.py 文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-28
    • 2010-12-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多