Python导入类简单示例错误

时间:2016-01-08 12:36:36

标签: python python-2.7

我想知道为什么构建类的简单示例没有正常工作:

树结构如下所示

class_project/
├── class_project
│   ├── __init__.py
│   └── classtheclass.py
└── tests 
    ├── __init__.py
    └── test.py

classtheclass.py看起来像这样:

class ClassTheClass(object):
    def __init__(self):
        print "yeees"

test.py看起来像这样:

from class_project.classtheclass import ClassTheClass


i = ClassTheClass()

init .py为空

所以如果我在shell上执行

  

python test.py

它给了我

  

回溯(最近一次呼叫最后一次):文件" test.py",第1行,in          from class_project.classtheclass import ClassTheClass ImportError:没有名为class_project.classtheclass的模块

那是错的。在Pycharm,这甚至有用......!

3 个答案:

答案 0 :(得分:1)

当您运行python test.py时,解释器将在标准库位置(例如/usr/local/lib/python2.7/site-packages和朋友)和您调用解释器的tests文件夹中查找Python代码(此集合位置被称为" Python Path",你可以用import sys; print sys.path)来查看它。

这些地点都不包括class_project.classtheclass

有多种方法可以解决这个问题。

您可以将PYTHONPATH环境变量设置为包含class_project

export PYTHONPATH="/path/to/class_project:$PYTHONPATH"  # Note: this has to be the top-level class_project directory, you have two with this name here.
python test.py  # This will now work

您可能也可以使用相对导入,但我认为解决问题并不能解决问题。

答案 1 :(得分:1)

您的文件树结构错误,如果您没有使用新的lib路径导出PYTHONPATH,则必须将test.py置于以下结构中,以使test.py从class_project访问classtheclass。

class_project/
├── class_project
│   ├── classtheclass.py
│   └── __init__.py
└── test.py

答案 2 :(得分:0)

Python搜索导入的模块如下,例如import foo

  • 首先,搜索built-in模块,如果foo不是built-in模块,请转到下一个
  • 口译员将搜索sys.pathsys.path将包括:当前目录,PYTHONPATH和安装相关路径。如果foo位于sys.path,则会导入该ImportError。否则,它将是/path/to/project

在这里,您可以在项目父目录中执行,也可以显式添加sys.pathDROP TABLE IF EXISTS my_table; CREATE TABLE my_table (ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,USER VARCHAR(12) NOT NULL ,LOCATION VARCHAR(12) ); INSERT INTO my_table VALUES (1 ,'Steve','home'), (2 ,'Steve','work'), (3 ,'Steve','school'), (4 ,'Eve','home'), (5 ,'Eve','work'), (6 ,'Eve','school'), (7 ,'RJ','school');