http://p1.bqimg.com/1949/d47e9f7237c99ae4.png
http://p1.bqimg.com/1949/e97af30172ba6985.png
用的python版本是3.5.2
第一章图是我导入模块时报的错。简要说明下: 用 from apis import APIError pycharm 直接提示模块找不到,于是用 from .apis import APIError pycharm 虽然没有提示有问题,但是运行是报 SystemError: Parent module '' not loaded, cannot perform relative import 。图中我都用箭头标出来了。
第二张图是 pycharm 的默认配置。
我用 from .apis import APIError 意思不就是导入当前路径下的模块么,为什么运行时报错呢?这个问题怎么解决呢,各位帮忙下!感谢!
1
Tianny OP pycharm 版本是 2016.2.3
|
2
mgna17 2017-03-13 17:53:31 +08:00
加个__init__.py 。。。
|
3
alphadog619 2017-03-13 17:55:59 +08:00
自定义模块要放在一个 package 中,也就是文件夹中必须有一个__init__.py 才能作为自定义包来引用
|
4
lgpqdwjh 2017-03-13 18:01:32 +08:00
要理解什么是包, 何为 __init__.py
|
5
Tianny OP @mgna17 http://p1.bpimg.com/1949/dccbaca1022f7cc1.png 为什么我改成这样就可以了?并没有加__init__.py ,用 from apis import APIError ,虽然 pycharm 提示找不到模块,但是代码却正确执行了?我现在的所有代码都是在 www 同一个目录下的
|
6
Tianny OP @lgpqdwjh http://p1.bpimg.com/1949/dccbaca1022f7cc1.png 为什么我改成这样就可以了?并没有加__init__.py ,用 from apis import APIError ,虽然 pycharm 提示找不到模块,但是代码却正确执行了?我现在的所有代码都是在 www 同一个目录下的
|
8
amoyiki 2017-03-13 18:13:42 +08:00 via iPhone 1
因为 IDE 的搜索路径应该是以 mblog 为根目录的。所以提示找不到模块,其实我平常都是忽略这些检查的
|
9
Tianny OP @alphadog619 http://p1.bpimg.com/1949/dccbaca1022f7cc1.png 为什么我改成这样就可以了?并没有加__init__.py ,用 from apis import APIError ,虽然 pycharm 提示找不到模块,但是代码却正确执行了?我现在的所有代码都是在 www 同一个目录下的
|
10
Tianny OP @amoyiki 懂了!所以可以在 www 目录下建个__init__.py 这样导入 from www.apis imprt APIError.那么导入同一个目录下的文件,不需要__init__.py ,因为并没有跨 package 导入。是吗?
|
11
amoyiki 2017-03-13 18:27:03 +08:00 via iPhone
我记得 pycharm 可以自定义项目根目录的功能,你可以查查看
|
12
sunbeams001 2017-03-13 19:43:33 +08:00
是这个吧
www - right click - Mark Directory As - Sources Root |
13
wuyadong 2017-03-13 20:33:52 +08:00
mark directory as source root ?
|
14
Tianny OP @sunbeams001 恩恩
|
15
piapia 2017-03-16 22:54:21 +08:00
from .apis import APIError 是相对引用, 把点去掉就可以了.
|
16
chunjie 2018-04-03 01:49:28 +08:00
@piapia 把点去掉是可以,但是 pycharm 又提示出错,可以我导入那些别人写好的包像 from redis import StrictRedis,pycharm 不会报错也能运行,为何导入自己相对路径下的 pycharm 就提示出错呢?
|
17
chunjie 2018-04-03 02:19:54 +08:00
@chunjie 我明白了,原来是要 pycharm 可以对某个文件夹设置为 root,就不会报错了,如果是要引用 root 下的子文件夹下的文件,那么就要在这个子文件夹下添加__init__.py 文件才能执行,不能添加__init__.py 文件 pycharm 不会报错,但是无法执行,会提示找不到模块。
|