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依次向下调用就可以了。
仔细展开
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的一些问题相关推荐
- 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 . ...
- python怎么封装方法然后调用_Python实现封装打包自己写的代码,被python import
1.新建一个文件夹example,里面放入要打包的.py文件,以及必需的_init_.py. 代码如下: # -*- coding: utf-8 -*- """ Crea ...
- python import出错_Python ImportError: cannot import name urlopen错误分析
在学习python的socket编程过程中遇到一个错误,错误的提示信息如下: ImportError: cannot import name urlopen,出现该问题的原因,主要是因为我的目录下有一 ...
- import的用法python_Python导入模块,Python import用法(超级详细)
Python导入模块,Python import用法(超级详细) 使用 Python 进行编程时,有些功能没必须自己实现,可以借助 Python 现有的标准库或者其他人提供的第三方库.比如说,在前面章 ...
- boost::python::import相关的测试程序
boost::python::import相关的测试程序 实现功能 C++实现代码 实现功能 boost::python::import相关的测试程序 C++实现代码 #include <boo ...
- python import 路径_python import 上级目录的导入
python import 上级目录的导入,路径,上级,文件,目录,递归 python import 上级目录的导入 易采站长站,站长之家为您整理了python import 上级目录的导入的相关内容 ...
- 关于python import的sys.path路径问题
关于python import的sys.path路径问题 sys.path 先说一下 sys.path 这个变量,该变量需要导入 sys 官方库方可使用,它是一个列表,是当前 python 文件 im ...
- python import 错误 TypeError: 'module' object is not callable
python import 错误 TypeError: 'module' object is not callable 在这里,有 Person.py test.py; 在 test.py 里面 im ...
- python import自定义模块方法
python包含子目录中的模块方法比较简单,关键是能够在sys.path里面找到通向模块文件的路径. 下面将具体介绍几种常用情况: (1)主程序与模块程序在同一目录下: 如下面程序结构: -- src ...
- Python中常见的__init__.py是什么意思?详解Python import的方式和原理
Python中常见的__init__.py是什么意思?详解Python import的方式和原理 1 什么是模块化编程? 2 __init__.py文件的作用 3 Python如何import第三方库 ...
最新文章
- X@X.X域名转向的实现
- Terminal终端的快捷键
- 10G_Ethernet_03 Example Design
- shell 脚本学习(一)
- 其实程序员高工资,好多时候就是加班和自己硬撑出来的
- 【vjudge contest 418548】2021 BUAA Winter Training 3(Private),签到题ABCDG
- Canon EOS Utility安装和使用说明
- 自回归模型 - PixelCNN
- 安卓开发调用python脚本_android开发调用python脚本
- android 调色板,所不了解的Android调色板
- 嵌入式系统开发-麦子学院(13)-linux底层系统开发(1)
- Android 神器 xposed 框架使用指南
- AD18设计PCB时常见问题及操作
- ant pro-table点击表格行高亮显示
- Win11电脑名如何更改?Win11更改电脑名的方法
- maven私有仓库的搭建——nexus的安装
- 简单易用的像素动画工具,最新版Aseprite v1.2.29
- 封装尺寸与封装的对应关系
- win10计算机自带的游戏怎么打开方式,win10自带游戏及应用打不开,应用商店闪退无法使用...
- 计算机一级基础题库,2016计算机一级公共基础练习题
热门文章
- vs2005 智能感知不正常的解决办法
- android:windowSoftInputMode属性详解
- Android Handler Runnable和Thread之间的区别和联系详解
- android TextView 的setTextSize方法的使用
- latex的资料ftp
- Fragment的布局中自定义Layout的onSizeChanged添加组件失败的问题
- CSS实现导航条Tab切换的三种方法
- operator new,new operator,placement new的区别
- [[UIScreen mainScreen] bounds]获取尺寸不对
- 关于关闭浏览器Session就丢失的讨论