我想知道为什么构建类的简单示例没有正常工作:
树结构如下所示
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,这甚至有用......!
答案 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.path
,sys.path
将包括:当前目录,PYTHONPATH
和安装相关路径。如果foo
位于sys.path
,则会导入该ImportError
。否则,它将是/path/to/project
。在这里,您可以在项目父目录中执行,也可以显式添加sys.path
到DROP 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');
。