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 PanameraM 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 RealLiuSha 2017-03-13 18:01:32 +08:00 要理解什么是包, 何为 __init__.py |
![]() | 5 PanameraM OP @mgna17 http://p1.bpimg.com/1949/dccbaca1022f7cc1.png 为什么我改成这样就可以了?并没有加__init__.py ,用 from apis import APIError ,虽然 pycharm 提示找不到模块,但是代码却正确执行了?我现在的所有代码都是在 www 同一个目录下的 |
![]() | 6 PanameraM 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 ![]() 因为 IDE 的搜索路径应该是以 mblog 为根目录的。所以提示找不到模块,其实我平常都是忽略这些检查的 |
![]() | 9 PanameraM OP @alphadog619 http://p1.bpimg.com/1949/dccbaca1022f7cc1.png 为什么我改成这样就可以了?并没有加__init__.py ,用 from apis import APIError ,虽然 pycharm 提示找不到模块,但是代码却正确执行了?我现在的所有代码都是在 www 同一个目录下的 |
![]() | 10 PanameraM 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 PanameraM 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 不会报错,但是无法执行,会提示找不到模块。 |