是否可以使用__init__.pyx
(编译为__init__.so
)创建Python2.7软件包?如果可以,怎么办?我没有运气让它工作。
这是我尝试过的:
setup.py
:
#!/usr/bin/env python
from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext
foo = Extension(name=’foo.init’, sources=[‘foo/init.pyx’])
bar = Extension(name=’foo.bar’, sources=[‘foo/bar.pyx’])
setup(name=’foo’,
packages = [‘foo’],
cmdclass={‘build_ext’:build_ext},
ext_modules = [foo, bar])
foo/__init__.pyx
:
import foo.bar
cpdef hello_world():
print “hello world”
foo.bar.blah()
foo/bar.pyx
:
cpdef blah():
print "blah"
上面有以下行为:
$ python -c 'import foo; foo.hello_world()'
Traceback (most recent call last):
File "<string>", line 1, in <module>
ImportError: No module named foo
我看到了此Hg
commit修复的Python问题#15576。在Python
Hg存储库的Git镜像中查看等效的Git提交,我发现可以从Python
v2.7.5标记(以及所有后续v2.7.x版本)访问该提交。有回归吗?
根据这个确实很老的邮件列表帖子,如果您还有一个__init__.py
文件,它也可以工作(该__init__.py
文件未使用,但对于将目录视为模块,从而__init__.so
加载该文件似乎是必需的)。
如果我添加__init__.py
:
# an exception just to confirm that the .so file is loaded instead of the .py file
raise ImportError("__init__.py loaded when __init__.so should have been loaded")
那么您的示例可在Linux Python 2.7.3上运行:
$ python -c 'import foo; foo.hello_world()'
hello world
blah
这有一个拐弯处的情况,因此不建议使用。请注意,在Windows上,这似乎对我不起作用
ImportError: DLL load failed: %1 is not a valid Win32 application.
附录 (需要一些额外说明):
似乎没有明确记录此行为。在关于Python
1.5时代的软件包的原始描述中,他们说:
如果没有
__init__.py
,则无法将目录识别为包
和
提示:搜索顺序由函数返回的后缀列表确定
imp.get_suffixes()
。通常,后缀按以下顺序搜索:“。so”,“
module.so”,“。py”,“。pyc”。目录没有显式出现在此列表中,而是位于其中的所有条目之前。
观察到的行为当然与此一致-__init__.py
需要将目录视为一个包,但是优先加载.so文件而不是.py文件-但这并不是明确的。
从Cython的角度来看,此行为似乎已用于编译标准库(在这种情况下__init__.py
始终存在),或者在给出的测试用例中使用https://github.com/cython/cython/blob/master/
tests / build /
package_compilation.srctree(还有其他一些示例)。在这些文件中,“
srctree”文件看起来将扩展为包含__init__.py
(然后是其他文件)然后编译的各种文件夹。仅有的__init__.so
经历可能从未被测试过。
问题内容: 我正在使用Python 3.5.1。我在这里阅读了文档和包部分:https : //docs.python.org/3/tutorial/modules.html#packages 现在,我具有以下结构: : 现在,在: 同样,现在在家里,超级文件夹: 实际上,我可以做各种事情: 为什么这样做?我虽然有被需要的文件(空的都可以)两种,并为要导入的时候Python的路径指向文件夹? 这似
本文向大家介绍pyx文件 生成pyd 文件用于 cython调用的实现,包括了pyx文件 生成pyd 文件用于 cython调用的实现的使用技巧和注意事项,需要的朋友参考一下 pyx文件是python的c扩展文件,代码要符合cython的规范,用什么编辑器写都行。我在eric4上写的,结果它默认用python解释器来进行解释,还提示有bug,“语法错误”。 上面的pyx文件还仅仅是源代码文件,要想
问题内容: 我在Windows机器上安装Python软件包(特别是JPype1 0.5.7)时遇到问题,并且想用Christoph Gohlke的Window二进制文件安装它。(根据我的经验,这减轻了许多其他软件包安装的麻烦。) 但是,尽管Christoph过去曾经提供.exe文件,但最近看来他是在上载.whl文件。 http://www.lfd.uci.edu/~gohlke/pythonlib
问题内容: 我想发布一个包含我的源代码和分发文件的npm软件包。我的Github存储库包含包含JavaScript源文件的文件夹。生成过程将生成包含分发文件的文件夹。当然,该文件夹不会签入Github存储库。 我该如何发布npm软件包,以使某人这样做时他们和文件夹一样好?当前,当我从git存储库运行时,它只会导致发布文件夹。 我的package.json看起来像这样: 问题答案: 看看packag
PyX 是一个用来创建 PostScript 和 PDF 文件的 Python 包,包含了通过 TeX/LaTeX 接口的 PostScript 绘图模型的抽象。复杂任务包括 2D 和 3D 图都是具备发行级别的质量。
问题内容: 当我在Windows上使用命令编译任意一个__init__.py文件时,它具有无法解析的外部符号错误(即“ LINK:错误LNK2001:无法解析的外部符号PyInit___init__”)。 当地环境: ctest / init.py setup.py 终端打印的信息: 问题答案: 也许此行为可能被视为-package中的一个小错误(如@DavidW所指出的,存在一个未解决的问题:h