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依次向下调用就可以了。


仔细展开

package1/haha.py

def hafun():print("package1 hafun")

package2/haha2.py

from package1 import hahadef 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 haha2haha.hafun()
haha2.hafun2()

运行结果:

package1 hafun
package1 hafun
package2 hafun2

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

转载于:https://www.cnblogs.com/JCcodeblgos/p/10322824.html

python import的一些问题相关推荐

  1. python import from class_Python: import vs from (module) import function(class) 的理解

    Python: Import vs From (module) import function(class) 本文涉及的 Python 基本概念: Module Class import from . ...

  2. python怎么封装方法然后调用_Python实现封装打包自己写的代码,被python import

    1.新建一个文件夹example,里面放入要打包的.py文件,以及必需的_init_.py. 代码如下: # -*- coding: utf-8 -*- """ Crea ...

  3. python import出错_Python ImportError: cannot import name urlopen错误分析

    在学习python的socket编程过程中遇到一个错误,错误的提示信息如下: ImportError: cannot import name urlopen,出现该问题的原因,主要是因为我的目录下有一 ...

  4. import的用法python_Python导入模块,Python import用法(超级详细)

    Python导入模块,Python import用法(超级详细) 使用 Python 进行编程时,有些功能没必须自己实现,可以借助 Python 现有的标准库或者其他人提供的第三方库.比如说,在前面章 ...

  5. boost::python::import相关的测试程序

    boost::python::import相关的测试程序 实现功能 C++实现代码 实现功能 boost::python::import相关的测试程序 C++实现代码 #include <boo ...

  6. python import 路径_python import 上级目录的导入

    python import 上级目录的导入,路径,上级,文件,目录,递归 python import 上级目录的导入 易采站长站,站长之家为您整理了python import 上级目录的导入的相关内容 ...

  7. 关于python import的sys.path路径问题

    关于python import的sys.path路径问题 sys.path 先说一下 sys.path 这个变量,该变量需要导入 sys 官方库方可使用,它是一个列表,是当前 python 文件 im ...

  8. python import 错误 TypeError: 'module' object is not callable

    python import 错误 TypeError: 'module' object is not callable 在这里,有 Person.py test.py; 在 test.py 里面 im ...

  9. python import自定义模块方法

    python包含子目录中的模块方法比较简单,关键是能够在sys.path里面找到通向模块文件的路径. 下面将具体介绍几种常用情况: (1)主程序与模块程序在同一目录下: 如下面程序结构: -- src ...

  10. Python中常见的__init__.py是什么意思?详解Python import的方式和原理

    Python中常见的__init__.py是什么意思?详解Python import的方式和原理 1 什么是模块化编程? 2 __init__.py文件的作用 3 Python如何import第三方库 ...

最新文章

  1. X@X.X域名转向的实现
  2. Terminal终端的快捷键
  3. 10G_Ethernet_03 Example Design
  4. shell 脚本学习(一)
  5. 其实程序员高工资,好多时候就是加班和自己硬撑出来的
  6. 【vjudge contest 418548】2021 BUAA Winter Training 3(Private),签到题ABCDG
  7. Canon EOS Utility安装和使用说明
  8. 自回归模型 - PixelCNN
  9. 安卓开发调用python脚本_android开发调用python脚本
  10. android 调色板,所不了解的Android调色板
  11. 嵌入式系统开发-麦子学院(13)-linux底层系统开发(1)
  12. Android 神器 xposed 框架使用指南
  13. AD18设计PCB时常见问题及操作
  14. ant pro-table点击表格行高亮显示
  15. Win11电脑名如何更改?Win11更改电脑名的方法
  16. maven私有仓库的搭建——nexus的安装
  17. 简单易用的像素动画工具,最新版Aseprite v1.2.29
  18. 封装尺寸与封装的对应关系
  19. win10计算机自带的游戏怎么打开方式,win10自带游戏及应用打不开,应用商店闪退无法使用...
  20. 计算机一级基础题库,2016计算机一级公共基础练习题

热门文章

  1. vs2005 智能感知不正常的解决办法
  2. android:windowSoftInputMode属性详解
  3. Android Handler Runnable和Thread之间的区别和联系详解
  4. android TextView 的setTextSize方法的使用
  5. latex的资料ftp
  6. Fragment的布局中自定义Layout的onSizeChanged添加组件失败的问题
  7. CSS实现导航条Tab切换的三种方法
  8. operator new,new operator,placement new的区别
  9. [[UIScreen mainScreen] bounds]获取尺寸不对
  10. 关于关闭浏览器Session就丢失的讨论