我来过这里:
还有很多我没有复制的网址,有些在SO上,有些在其他网站上,当我认为我有快速解决方案的时候.
永远反复出现的问题是:使用Windows 7,32位Python 2.7.3,如何解决这个"非包装中尝试相对导入"的消息?我在pep-0328上构建了一个包的精确副本:
package/
__init__.py
subpackage1/
__init__.py
moduleX.py
moduleY.py
subpackage2/
__init__.py
moduleZ.py
moduleA.py
Run Code Online (Sandbox Code Playgroud)
我确实在适当的模块中创建了名为spam和eggs的函数.当然,它没有用.答案显然在我列出的第4个网址中,但这对我来说都是校友.我访问过的其中一个网址上有此回复:
相对导入使用模块的name属性来确定模块在包层次结构中的位置.如果模块的名称不包含任何包信息(例如,它设置为'main'),则解析相对导入,就像模块是顶级模块一样,无论模块实际位于文件系统的哪个位置.
上面的反应看起来很有希望,但它对我来说都是象形文字.所以我的问题是,如何让Python不回归"尝试非包装中的相对导入"?有一个答案涉及-m,据说.
有人可以告诉我为什么Python会给出错误信息,非包装意味着什么!,为什么以及如何定义"包裹",并且准确的答案足以让幼儿园儿童理解.
编辑:导入是从控制台完成的.
我不理解pep-0404的以下内容
在Python 3中,包中的隐式相对导入不再可用 - 仅支持绝对导入和显式相对导入.此外,星型导入(例如来自x import*)仅允许在模块级代码中使用.
什么是相对进口?在python2中允许星形导入的其他地方?请举例说明.
我正在尝试根据本教程http://docs.cython.org/src/tutorial/cython_tutorial.html#cython-hello-world在Cython中创建“ Hello World”程序
我创建了helloworld.pyx
print("Hello World")
Run Code Online (Sandbox Code Playgroud)
和setup.py:
from distutils.core import setup
from Cython.Build import cythonize
setup(
ext_modules = cythonize("helloworld.pyx")
)
Run Code Online (Sandbox Code Playgroud)
如何更改setup.py以指定源是Python 3,而不是本教程中的Python 2?如果我从命令行调用“ cython”命令,它将接受-3选项。但是,如果我python setup.py build_ext --inplace按照本教程中所示进行编译,该如何指定Python 3源?对于Hello World程序来说,它可能无关紧要,但是随着我开始在实际项目中使用Cython时,它会变得很重要。
非常感谢!
我有一个.pyx文件,我在其中定义了一些函数,例如
cdef double foo(double a) nogil:
return 3. * a
Run Code Online (Sandbox Code Playgroud)
我怎样才能在pyx文件之外对这些函数的行为进行单元测试?由于它们是cdef'd,我无法简单地导入它们......
在即将到来的Cython 3.0版本中,3strlanguage_level(由Cython 0.29引入)成为新的默认值,而不是当前的默认值2,即,如果未设置language_level(如何设置),则会收到以下警告:
FutureWarning:未设置Cython指令'language_level',暂时使用'3str'(Py3)。这与以前的版本有所不同!文件:/home/ed/mygithub/cython/foo.pyx tree = Parsing.p_module(s,pxd,full_module_name)
但是3str,3语言级别和语言级别之间有什么区别?对于哪些代码,使用语言级别3str和3语言级别编译的模块的行为会有所不同吗?
我在安装traj-dist 使用Cython. 在Linux下使用gcc编译后可以安装,但在winodws下使用mingw64 gcc编译后无法安装。
我使用Python 3.8,Cython 0.29.21。
python setup.py build_ext --inplace --force
完整的输出错误消息在这里
Error compiling Cython file:
------------------------------------------------------------
...
q=len(Q)
cc=_compute_critical_values(P,Q,p,q)
eps=cc[0]
while(len(cc)!=1):
m_i=len(cc)/2-1
^
------------------------------------------------------------
traj_dist\cydist\frechet.pyx:535:21: Cannot assign type 'double' to 'int'
Run Code Online (Sandbox Code Playgroud)
有编译错误的文件是https://github.com/bguillouet/traj-dist/blob/master/traj_dist/cydist/frechet.pyx
我怎样才能在windows下编译它?