gpt4 book ai didi

python - 压缩标准库时如何运行pycharm单元测试?

转载 作者:行者123 更新时间:2023-11-28 18:42:57 26 4
gpt4 key购买 nike

我一直在尝试将基于 Maya 的 python 项目移植到 PyCharm,但我在运行单元测试时遇到了问题。

Maya 提供了自己的 python 解释器 (mayapy.exe) 和 python stdlib 的压缩版本(在本例中为“Python27.zip”)据我所知,此处的 stdlib 没有什么特别之处,但要运行 native maya 函数,您必须使用 MayaPy 而不是通用的 python。

问题似乎是 jetBrains 测试运行器 (utRunner.py) 想要获取 os.system 并且它正在运行,因为它使用了不允许 zip 文件的特定导入例程。它尝试这样做:

def import_system_module(name):
if sys.platform == "cli": # hack for the ironpython
return __import__(name)
f, filename, desc = imp.find_module(name)
return imp.load_module('pycharm_' + name, f, filename, desc)

并因此错误而失败:

 ImportError: No module named os

我认为是因为这是绕过了 zip 导入 Hook 。

one solution posted here ,这基本上是解压标准库 zip。我不愿意这样做,因为我可能需要在我没有管理员权限的机器上运行测试。我也不愿意修补上面的代码,因为我不清楚它如何适应整个测试过程。

那么:如何使用 PyCharm 使用压缩的标准库运行测试,而无需解压缩库或过多调整 PyCharm 安装?

最佳答案

对于潜伏者:我找不到比上面链接的更好的解决方案,因此有必要将 2.7 标准库解压缩到一个松散的文件夹中。不优雅,但它有效。

maya 用户还需要注意另一个问题:PyCharm 不喜欢运行 Maya.standalone 的测试——独立 session 没有正确退出,因此在运行测试时(在更多文件中)调用

 import maya.standalone
maya.standalone.initialize()

pycharm 测试运行程序会在完成时挂起。经过多次挫折后,我发现向测试代码添加一个 atexit 处理程序将允许独立程序以 PyCharm 可以容忍的方式退出:

def get_out_of_maya():
try:
import maya.commands as cmds
cmds.file(new=True, force=True)
except:
pass
os._exit(0) # note underscore

import atexit
atexit.register(get_out_of_maya)

这会抢占 Maya 中的 atexit Hook ,并允许测试以 Pycharm 运行程序满意的方式完成。 FWIW,如果您从子进程运行 MayaPy.exe 并以这种方式执行测试,它也会有所帮助。

关于python - 压缩标准库时如何运行pycharm单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24092084/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com