我使用export FLASK_APP=flask_app然后做flask run但我得到错误:
错误:提供的文件/路径(flask_app)似乎不存在.请验证路径是否正确.如果app不在PYTHONPATH上,请确保扩展名为.py
但是,该文件确实存在,甚至在当前工作目录中.使用文件的完整路径也不起作用.
我是CUDA的新手,我正在试图弄清楚PyCUDA(免费)或NumbaPro CUDA Python(非免费)对我来说会更好(假设图书馆成本不是问题).
两者似乎都要求您使用各自的Python方言.但是,似乎PyCUDA要求你在C代码中编写一个内核函数,这比使用NumbaPro更麻烦,NumbaPro似乎为你做了所有艰苦的工作.
确实如此吗?会有显着的性能差异吗?
如果按照Cython 调试文档中指定的那样使用 python2.7 配置它,则在从源代码构建 gdb 后,可以使用 gdb 调试 Python3/Cython 项目。
但是,文档中的示例:
python-gdb实际上链接到python2......那么它是如何工作的?)source.pyx和myfile.pyx)此外,它:
main函数驻留在 .pyx 中(但我的函数驻留在常规main.py)main.py和cythonCode.pyxdo )有人可以解释一下(最好有工作示例)如何在涉及刚才提到的所有 3 点的情况下调试 Python3/Cython 项目吗?
目前看来我实际上可以按照这篇Cython wiki 文章让 DDD 工作,但后来我发现这是“旧”的做法,它指的是我也链接到的当前调试文档。然而,目前我还不清楚“新”方法如何发挥作用(旧方法对我来说更有意义),而且让它发挥作用似乎更复杂。
我想将“\t”写入文件。不是“制表符”,而是字面上的“\t”。我该怎么做呢?这已经让我发疯了一个多小时了;我尝试的所有操作都会产生一个实际的“制表符”(空白)。
我为什么想要这个?因为我正在使用 ConfigParser() 生成一个配置文件,其中还包含一些分隔符,并且我希望该文件是人类可读的。我不认为空白是可读的。
编辑:抱歉,问题不清楚:我想对包含字符串的变量执行此操作。所以写“\\t”不是一个选择。我必须将包含转义字符的变量的值写入文件,其方式在思想上等同于:
v = "\t"
write(v)
Run Code Online (Sandbox Code Playgroud)
不改变定义的情况v下(尽管对 的操作是可以的)定义为“\t”后,v似乎不可能更改为“\\t”。v
目标是将pytest单元测试框架用于使用 Cython 的 Python3 项目。这不是即插即用的事情,因为pytest默认情况下无法导入 Cython 模块。
一种不成功的解决方案是使用该pytest-cython插件,但它对我来说根本不起作用:
> py.test --doctest-cython
usage: py.test [options] [file_or_dir] [file_or_dir] [...]
py.test: error: unrecognized arguments: --doctest-cython
inifile: None
rootdir: /censored/path/to/my/project/dir
Run Code Online (Sandbox Code Playgroud)
要验证我是否已安装该软件包:
> pip freeze | grep pytest-cython
pytest-cython==0.1.0
Run Code Online (Sandbox Code Playgroud)
更新:我正在使用 PyCharm,它似乎没有使用我的 pip 安装的软件包,而是使用我的项目使用的软件包的自定义(?)pycharm 存储库。一旦我添加pytest-cython到该存储库,该命令就会运行,但奇怪的是它无论如何都无法识别 Cython 模块,尽管包/附加组件是专门为此目的而设计的:
> pytest --doctest-cython
Traceback:
tests/test_prism.py:2: in <module>
from cpc_naive.prism import readSequence, processInput
cpc_naive/prism.py:5: in <module>
from calculateScore import calculateScore, filterSortAlphas,
calculateAlphaMatrix_c#, incrementOverlapRanges # cython code
E ImportError: No module …Run Code Online (Sandbox Code Playgroud) 目标是为使用 Cython 的 Python3 项目使用 pytest 单元测试框架。这不是即插即用的事情,因为默认情况下 pytest 无法导入 Cython 模块。也就是说,从 Cython .pyx 模块导入时出现以下错误,在我的例子中名为“calculateScore”:
package/mainmodule.py:5: in <module>
from calculateScore import some_functions
E ImportError: No module named 'calculateScore'
Run Code Online (Sandbox Code Playgroud)
使用pytest-runner和pytest-cython方法时都会出现此问题。奇怪的是,当您不尝试使用pytest. 将导入样式更改为import calculateScore或import package.calculateScore没有帮助。
假设我想要最佳性能,我怎么知道在定义Cython函数时是使用def,cdef还是cpdef?
EDIT2:正如@ShadowRanger指出的那样,这是一种Numpy现象,而不是Python。但是,当在Python中使用列表推导进行计算(因此x+y变为[a+b for a,b in zip(x,y)])时,所有算术运算仍会花费同样长的时间(尽管是Numpy的100倍以上)。但是,当我在真实的仿真中使用整数除法时,它们的运行速度会更快。因此,主要问题仍然存在:即使在Python中,为什么这些测试表明整数除法没有比常规除法更快?
EDIT1:版本:Python 3.5.5,Numpy 1.15.0。
似乎在Python Numpy中,整数除法比(整数的)正规除法更昂贵,这是违反直觉的。测试时,我得到以下信息:
setup_string = 'import numpy as np;\
N=int(1e5);\
x=np.arange(1,N+1, dtype=int);\
y=np.arange(N, dtype=int);'
Run Code Online (Sandbox Code Playgroud)
加法(+)〜0.1s
timeit("x+y", setup=setup_string, number=int(1e3))
0.09872294100932777
Run Code Online (Sandbox Code Playgroud)
减法(-)〜0.1s
timeit("x-y", setup=setup_string, number=int(1e3))
0.09425603999989107
Run Code Online (Sandbox Code Playgroud)
乘法(*)〜0.1s
timeit("x*y", setup=setup_string, number=int(1e3))
0.09888673899695277
Run Code Online (Sandbox Code Playgroud)
除(/)〜0.35s
timeit("x/y", setup=setup_string, number=int(1e3))
0.3574664070038125
Run Code Online (Sandbox Code Playgroud)
整数除(//)〜1s(!)
timeit("x//y", setup=setup_string, number=int(1e3))
1.006298642983893
Run Code Online (Sandbox Code Playgroud)
任何想法为什么会这样?为什么整数除法不快?
python performance numpy integer-division integer-arithmetic
更新:之前,我使用paste函数作为示例而不是任意myFun函数.这个问题稍微容易一些,因为paste实际上可以对矢量进行操作,而myFun不能.
我想将自己的函数元素应用于data.frame中的每个元素,并将修改后的data.frame作为返回值.
例:
> df <- data.frame(c(1,2,3), c(2,3,4))
> df
c.1..2..3. c.2..3..4.
1 1 2
2 2 3
3 3 4
> df_x <- magical_apply_function(df, function(x) myFun
> df_x
c.1..2..3. c.2..3..4.
1 myFun(1) myFun(2)
2 myFun(2) myFun(3)
3 myFun(3) myFun(4)
Run Code Online (Sandbox Code Playgroud)
我完全不知道无法在互联网上的任何地方找到这个问题的答案.大多数资源谈apply,lapply和sapply但那些只工作在矢量/列表和它们只返回列表.
for循环真的是唯一的方法吗?
我正在使用浮点数.如果我做:
import numpy as np
np.round(100.045, 2)
Run Code Online (Sandbox Code Playgroud)
我明白了:
Out[15]: 100.04
Run Code Online (Sandbox Code Playgroud)
显然,这应该是100.05.我知道IEEE 754的存在,并且浮点数的存储方式是导致这种舍入误差的原因.
我的问题是:我怎样才能避免这个错误?
project
|-main.py
|-cythonCode.pyx
Run Code Online (Sandbox Code Playgroud)
该main.py文件从 导入函数cythonCode.pyx。定期运行程序工作正常,但调试它会导致以下异常:
(...)
File "<censored>/project/main.py", line 5, in <module>
from cythonCode import *
File "project/cythonCode.pyx", line 5, in init cythonCode
File "project/cythonCode.pyx", line 5, in __Pyx_PyMODINIT_FUNC PyInit_cythonCode(void)
TypeError: 'NoneType' object is not callable
Run Code Online (Sandbox Code Playgroud)
怎么了?为什么调试器不能与 Cython 一起使用?
python ×6
cython ×5
python-3.x ×4
debugging ×2
numpy ×2
pycharm ×2
pytest ×2
apply ×1
cuda ×1
dataframe ×1
ddd-debugger ×1
definition ×1
element ×1
escaping ×1
flask ×1
function ×1
gdb ×1
numba ×1
numba-pro ×1
performance ×1
pycuda ×1
r ×1
rounding ×1
unit-testing ×1