是否可以在文件.py中包含.pyx

问题描述 投票:0回答:2

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

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

但它仍然给我以下错误:ModuleNotFoundError:没有名为“my_module”的模块

我正在运行 Python 3.8.3 和 Cython 0.29.21

我的文件夹结构如下

文件夹

  • 我的模块.pyx
  • where_I_want_to_call.py
python cython
2个回答
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

包含

_
标志很重要。

代码:

测试.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

决赛:

在导入任何

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


0
投票

修改之前,我的代码在导入 utils.pyx 文件时总是返回如下: ''' 提示:确保您的测试模块/包具有有效的 Python 名称。 ''' 这对我有用,也是最简单的方法。

© www.soinside.com 2019 - 2024. All rights reserved.