• 【Pycharm学习】pycharm2016.2.X中出现“Parent module ‘YOUR_MODULE_HERE’ not found while handling absolute import ”解决方法


    调试环境:
    系统:window7 64 

    软件:pycharm

    版本:2016.2.3

    在使用本版本的pycharm时,进行unittest的时候,出现如下提示的错误提示:

    RuntimeWarning: Parent module ‘YOUR_MODULE_HERE’ not found while handling absolute import

    其实这是pycharm2016.2.X的一个Bug,在pycharm2017中已经修复。如何继续在pycharm2016.2.X正常试用呢??

    解决方法:

    使用旧的utrunner.py文件替换当前版本,文件路径为…/PyCharm.app/Contents/helpers/pycharm/utrunner.py(macos平台)

    或者…JetBrainsPyCharm 2016.2.2helperspycharmutrunner.py(windows平台)

    utrunner.py的内容如下(替换文件前请先做好备份):

    import sys
    import imp
    import os
    import fnmatch

    helpers_dir = os.getenv("PYCHARM_HELPERS_DIR", sys.path[0])
    if sys.path[0] != helpers_dir:
    sys.path.insert(0, helpers_dir)

    from tcunittest import TeamcityTestRunner
    from nose_helper import TestLoader, ContextSuite
    from pycharm_run_utils import import_system_module
    from pycharm_run_utils import adjust_sys_path
    from pycharm_run_utils import debug, getModuleName, PYTHON_VERSION_MAJOR

    adjust_sys_path()

    os = import_system_module("os")
    re = import_system_module("re")

    modules = {}

    def loadSource(fileName):
    baseName = os.path.basename(fileName)
    moduleName = os.path.splitext(baseName)[0]

    # for users wanted to run unittests under django
    #because of django took advantage of module name
    settings_file = os.getenv('DJANGO_SETTINGS_MODULE')
    if settings_file and moduleName == "models":
    baseName = os.path.realpath(fileName)
    moduleName = ".".join((baseName.split(os.sep)[-2], "models"))

    if moduleName in modules and len(sys.argv[1:-1]) == 1: # add unique number to prevent name collisions
    cnt = 2
    prefix = moduleName
    while getModuleName(prefix, cnt) in modules:
    cnt += 1
    moduleName = getModuleName(prefix, cnt)
    debug("/ Loading " + fileName + " as " + moduleName)
    if os.path.isdir(fileName):
    fileName = fileName + os.path.sep
    module = imp.load_source(moduleName, fileName)
    modules[moduleName] = module
    return module

    def walkModules(modulesAndPattern, dirname, names):
    modules = modulesAndPattern[0]
    pattern = modulesAndPattern[1]
    # fnmatch converts glob to regexp
    prog_list = [re.compile(fnmatch.translate(pat.strip())) for pat in pattern.split(',')]
    for name in names:
    for prog in prog_list:
    if name.endswith(".py") and prog.match(name):
    modules.append(loadSource(os.path.join(dirname, name)))


    # For default pattern see https://docs.python.org/2/library/unittest.html#test-discovery
    def loadModulesFromFolderRec(folder, pattern="test*.py"):
    modules = []
    # fnmatch converts glob to regexp
    prog_list = [re.compile(fnmatch.translate(pat.strip())) for pat in pattern.split(',')]
    for root, dirs, files in os.walk(folder):
    files = [f for f in files if not f[0] == '.']
    dirs[:] = [d for d in dirs if not d[0] == '.']
    for name in files:
    for prog in prog_list:
    if name.endswith(".py") and prog.match(name):
    modules.append(loadSource(os.path.join(root, name)))
    return modules

    testLoader = TestLoader()
    all = ContextSuite()
    pure_unittest = False

    def setLoader(module):
    global testLoader, all
    try:
    module.__getattribute__('unittest2')
    import unittest2

    testLoader = unittest2.TestLoader()
    all = unittest2.TestSuite()
    except:
    pass

    if __name__ == "__main__":
    arg = sys.argv[-1]
    if arg == "true":
    import unittest

    testLoader = unittest.TestLoader()
    all = unittest.TestSuite()
    pure_unittest = True

    if len(sys.argv) == 2: # If folder not provided, we need pretend folder is current
    sys.argv.insert(1, ".")

    options = {}
    for arg in sys.argv[1:-1]:
    arg = arg.strip()
    if len(arg) == 0:
    continue

    if arg.startswith("--"):
    options[arg[2:]] = True
    continue

    a = arg.split("::")
    if len(a) == 1:
    # From module or folder
    a_splitted = a[0].split("_args_separator_") # ";" can't be used with bash, so we use "_args_separator_"
    if len(a_splitted) != 1:
    # means we have pattern to match against
    if os.path.isdir(a_splitted[0]):
    debug("/ from folder " + a_splitted[0] + ". Use pattern: " + a_splitted[1])
    modules = loadModulesFromFolderRec(a_splitted[0], a_splitted[1])
    else:
    if os.path.isdir(a[0]):
    debug("/ from folder " + a[0])
    modules = loadModulesFromFolderRec(a[0])
    else:
    debug("/ from module " + a[0])
    modules = [loadSource(a[0])]

    for module in modules:
    all.addTests(testLoader.loadTestsFromModule(module))

    elif len(a) == 2:
    # From testcase
    debug("/ from testcase " + a[1] + " in " + a[0])
    module = loadSource(a[0])
    setLoader(module)

    if pure_unittest:
    all.addTests(testLoader.loadTestsFromTestCase(getattr(module, a[1])))
    else:
    all.addTests(testLoader.loadTestsFromTestClass(getattr(module, a[1])),
    getattr(module, a[1]))
    else:
    # From method in class or from function
    debug("/ from method " + a[2] + " in testcase " + a[1] + " in " + a[0])
    module = loadSource(a[0])
    setLoader(module)

    if a[1] == "":
    # test function, not method
    all.addTest(testLoader.makeTest(getattr(module, a[2])))
    else:
    testCaseClass = getattr(module, a[1])
    try:
    all.addTest(testCaseClass(a[2]))
    except:
    # class is not a testcase inheritor
    all.addTest(
    testLoader.makeTest(getattr(testCaseClass, a[2]), testCaseClass))

    debug("/ Loaded " + str(all.countTestCases()) + " tests")
    TeamcityTestRunner().run(all, **options)

    也可到小编的百度网盘进行下载:
    链接: https://pan.baidu.com/s/1hr4sOb6 密码: fyut
    ————————————————
    版权声明:本文为CSDN博主「zhusongziye」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/zhusongziye/article/details/77635423

    作者:gtea 博客地址:https://www.cnblogs.com/gtea
  • 相关阅读:
    Android布局优化
    Handler原理
    最少钱币数:
    ASCII码排序
    Fibonacci数
    奇偶数分离
    认识Dom
    js浏览器对象
    返回/设置时间方法与 Math对象
    window.open
  • 原文地址:https://www.cnblogs.com/gtea/p/13219066.html
Copyright © 2020-2023  润新知