从Windows终端中的另一个模块运行脚本时,Python返回ImportError

时间:2015-09-17 09:41:52

标签: windows python-2.7

我有一个以下(简化)结构的项目。

switch(task)
{
  case 1: case 0;//I don't know what "all" is, so I'm using 0 here
    print();
    if (task == 0) goto case 2;
    break;
  case 2:
    save();
    if (task == 0) goto case 3;
    break;
  case 3:
    sendmail();
    break;
}

script11的内容:

MyProject
|__Module1
    __init__.py
    -script11
|__Module2
    __init__.py
    -script22
__init__.py

script22的内容:

var11 = "hello"

当我从PyCharm内部运行script22时,它运行正常。 当我从Windows / PyCharm终端运行它时会打印一个ImportError

from MyProject.Module1.script11 import var11
print var11

如果我在与script22.py相同的模块/文件夹中创建script11.py文件,则脚本运行正常。

我在ENV.VARIABLES中有这些条目:

Traceback (most recent call last):
  File "F:\Project\Python27\Projects\folder1\MyProject\Module2\script22.py", line 3, in <module>
    from MyProject.module1.script11 import hello
ImportError: No module named MyProject.module1.script11

出了什么问题??? 我基本上无法自由使用我项目的所有模块。

1 个答案:

答案 0 :(得分:0)

可能是因为,你的模块不在pythonpath中,因此脚本无法找到所需的模块,PyCharms将当前项目添加到PythonPATH,因此当从PyCharms运行时,模块被解析,你看不出任何问题。 / p>

要解决这些问题,您可以执行以下操作之一。

  1. 将“F:\ Schoox \ Python27 \ Projects \ folder1 \”添加到PATH环境变量How to add to the pythonpath in windows 7?
  2. 将项目移至“c:\ python&lt;&gt; \ lib \ site-packages”(不推荐)
  3. 在导入模块之前,将路径“F:\ Schoox \ Python27 \ Projects \ folder1 \”动态附加到sys.path
  4. 所以你的script22.py变成了

    import sys
    sys.path.append(F:\Schoox\Python27\Projects\folder1\) 
    from MyProject.Module1.script11 import var11
    print var11
    

    检查https://docs.python.org/3/reference/import.html#searching以了解python如何处理导入以及查找顺序。