python import出错_python import的一些问题

python 在import 自己些的包的适合会出现一些奇怪的问题,尤其是在vs code这种编程环境比较宽松的情况下,自己找了一些资料来解决这个问题但是经过反复的实验都没有成功,因此些一些自己的体会。

首先推荐一篇博客:https://pyliaorachel.github.io/blog/tech/python/2017/09/15/pythons-import-trap.html 具体的import细节技术可以看这里(PS:按着这个里面引包的方法也会出现错误!)

概念

1.module 组建 指一个file 也就是一个.py文件

2.package 包 有多个module 或者 package 组成

_init_.py 一般都为空 告诉这个文件夹 是一个package

_main_.py 用来执行所有与函数 一般写在项目的一级目录下

_pycache_.py 只要package的module被调用就会自动生成一个这样的文件,下面还有相应的.pyc文件。

目前经过自己的尝试,在在同一个package下进行到的调取是没有问题的,可以随便调用,但是在多个package之间进行包的调取就会出现一系列问题,常见问题

1.ImportError: cannot import name ***

2.ValueError: attempted relative import beyond top-level package

3.ModuleNotFoundError: No module named 'main.**'; 'main' is not a package

综合上面的问题,以及自己实践可以发现,在vscode中向下调用package和module是可以的,但是要向上调用就用会出现问题,在pycharm这一点是可以避免的,因为pycharm是一个整体的运行环境,你即使写了很多的package再要在一个项目下都是可以根据相互之间合理的调用关系,从而进行调用的。但是vscode就不行,它每次运行的环境(目录)是具体到单个.py文件目录下,而不是像pycharm一样python的运行环境是项目的目录,所以要是在vscode里面安全的调用你写package就只有一个办法,把运行的main函数文件下载项目的最顶层,然后其他package依次向下调用就可以了。

1520631-20190126103506503-1948669347.png

仔细展开

1520631-20190126103513132-193950870.png

package1/haha.py

def hafun():

print("package1 hafun")

package2/haha2.py

from package1 import haha

def hafun2():

haha.hafun()

print("package2 hafun2")

package2与package1是同一级的,但是由于我们的__main__.py最终运行的目录是和package2与package1同一级,所以这里package2/haha2.py文件调用package1/haha.py文件的书写方法实际上是站在__main__.py这层目录的角度进行书写的。即from package1 import haha。调用package的方式个__main__.py 一样 即 from package1 import haha 和 from package2 import haha2。

main.py 函数进行最终调试调用

from package1 import haha

from package2 import haha2

haha.hafun()

haha2.hafun2()

运行结果:

package1 hafun

package1 hafun

package2 hafun2

以上是自己的一点浅显看法,欢迎大家批评指正!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值