我用C++编写了一个Python模块,并将其构建为共享对象库,并且工作正常.但是在计算出所有这些的同时,我注意到(通过strace)Python会查找一些不同的变体import.特别是,当我说import foo,Python按顺序搜索:
除了foomodule.so之外,这一切都是可以理解的.为什么Python会以name.so和namemodule.so的形式查找所有内容?这是一些历史文物吗?我搜索了很多,根本没有解释,我想知道我是否应该命名我的模块foomodule.so而不是foo.so. 我的系统似乎在每个约定之后都有一些现有的Python模块,所以我不禁想知道不同的名字是否意味着什么.
我有一个文件 foo.py,它包含一个非常慢的函数,需要 8 分钟才能计算。但是,当我将文件更改为foo.pyx并使用 cython 编译它而不进行其他更改时,计算需要 5 分钟。
我的问题是:如果我跑cython foo.py而不是cython foo.pyx然后跑
gcc -shared -pthread -fPIC -fwrapv -O2 -Wall -fno-strict-aliasing -I/usr/include/python2.7 -o foo.so foo.c
当我运行时import foo,python会导入.py文件还是编译后的.so文件?pyx 真的需要在那里吗?如果存在的话,有没有办法强制它.so接管?.py
原因是我无法在不破坏其他人机器上的代码的情况下更改 foo.py 的名称,但我真的希望它对于我的测试用例来说更快。如果我可以在本地编译它而不用担心在其他地方破坏代码,那就太好了。
(我正在测试这个,但需要一段时间)