记一次Python导包经历

最近由于需要写一个脚本调用另一个文件里面的一个方法,试了很久都导包失败,特此记录一下

问题背景

1)脚本文件为send_reward.py,要调用public_model_func.py里面的一个类方法

2)public_model_func.py里面导入了项目的其他包,其导包方式为from src.xxx.xxx import xxx,其中src为项目代码的根目录

3)项目处于运行状态,脚本是后续自己写的

解决过程

1)尝试在send_reward.py里面使用from src.xxx.xxx import xxx导包,结果提示找不到包

2)将send_reward.py放入与public_model_func.py同级目录下,使用from . import public_model_func,结果还是提示找不到包

3)想到可能是没有把路径加到sys.path里面,因此在send_reward.py的前面加上以下几行代码

import sys
sys.path.append("/xxx/xxx/src/xxx/xxx")  # public_model_func.py的上一级目录,从根目录开始

但是这样可以导入public_model_func.py,但是加载public_model_func.py时会导入其他的包,这时又会报错

4)考虑到public_model_func.py里面都是from src.xxx.xxx import xxx,因此考虑将src的上级目录放入sys.path,即

import sys
sys.path.append("/xxx/xxx")  # src的上级目录,注意最后面没有/

问题完美解决

小结

1)导包时要将导包路径加到sys.path里面
2)如果导的包里还导入了其他的包,那么需要特别注意是否所有包都能找到路径

原文地址:https://www.cnblogs.com/zzliu/p/11438914.html

时间: 2024-10-13 06:21:37

记一次Python导包经历的相关文章

python导包语句执行

今天在做项目中遇到一个问题,在first_page中引用login的登录方法,第一次执行登录可以正常登录,登录成功后,再选择返回主菜单,回到上个页面,再选择登录时报错"login_class isnotdefined" 百思不得其解,后来发现是Python的导包机制问题,import语句只有在单独执行这个模块的时候会主动执行,别的类在调用它的方法时不会执行import语句,因此在进入登录后再选择回到首页,没有执行导包语句,所以会报错"login_class is not de

python导包问题,这一篇就够了

解决办法: 将项目所在的根目录添加到sys.path中 在入口文件中加入如下代码: import sys import os # 将 项目的根目录添加到sys.path中 BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) sys.path.append(BASE_DIR) # 导入包或模块 from db.mysql.my_connect import connect 一.背景 最近在写Python自动化

记一次Python爬虫开发经历

为啥要做Python爬虫,是因为我去找电影的某个网站有点坑,它支持tag标签查询自己喜欢的电影,但是不支持双标签或者三标签查询.由于一个电影对应多种类型(tag),这就意味着,我需要进入这个电影介绍界面,看看他的tag是不是我需要的.太麻烦了.于是我想着做一个python爬虫. 首先需求分析. 流程如下:在网站的主界面获得每部电影的URL-->进入每部电影的介绍界面-->判断它的tag是否符合要求,如果符合返回这部电影的名字-->把满足条件的URL和电影名字保存为文件-->下一页

python 设置默认的导包路径

在python中 可以通过 sys 模块添加导包时的搜寻路径, sys.path 返回的是所有默认导包路径的列表(搜索次序从下标为零开始,直到寻找到需要导入的包结束) sys.path.insert(下标,包的路径) ,这样就可以将包的路径添加到指定下标(指定次序) 如在django 项目中的settings.py配置文件中,就可以通过下面这种方式,改变导入app时的默认导包路径 # Build paths inside the project like this: os.path.join(B

python相对导包问题

导包分为:绝对路径.相对路径 在测试时发现不能够使用相对路径 查过之后才知道: 运行模块(如:main.py)中导包只能使用绝对路径,不能使用相对路径 官方文档: Note that relative imports are based on the name of the current module. Since the name of the main module is always __main__, modules intended for use as the main modul

关于python的包

参考文献:http://blog.sina.com.cn/s/blog_615c388d01017b5o.html 注:本文大多对上连接的整理,仅用于学习,望博主见谅.转载请附上上述链接. 为什么要包? python中的Module是比较重要的概念.常见的情况是,事先写好一个.py文 件,在另一个文件中需要import时,将事先写好的.py文件拷贝 到当前目录,或者是在sys.path中增加事先写好的.py文件所在的目录,然后import.这样的做法,对于少数文件是可行的,但如果程序数目很 多,

Python自定义包引入【新手必学】

前言本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:sys_song python中的Module是比较重要的概念.常见的情况是,事先写好一个.py文 件,在另一个文件中需要import时,将事先写好的.py文件拷贝 到当前目录,或者是在sys.path中增加事先写好的.py文件所在的目录,然后import.这样的做法,对于少数文件是可行的,但如果程序数目很 多,层级很复杂,就很吃力了.如果你刚学python不久,有问题

Eclipse4.7使用基础 使用快捷键导包时,遇到不同包下有同名类时,出现选择框

os :windows7 x64    jdk:jdk-8u131-windows-x64    ide:Eclipse Oxygen Release (4.7.0) 初始状态:已经使用快键键进行导包,由于出现不包下存在同名类,出现选择框 以供选择 如果第一个是正确的话,选择第一个 效果 如果第二个是正确的话,选择第二个 效果 利用IDE的智能提示辅助修改 Java优秀,值得学习.Eclipse是一款免费.强大的IDE,值得学习使用.

导包语句

/* 有了包之后类与类之间的访问: 问题: 有了包之后类与类之间的访问每次都必须 要写上包名!烦!!!! 解决方案: sum提供导包语句让我们解决该问题. 导包语句作用:简化书写. (误区: 把一个类导入到内存中) 导包语句的格式: import 包名.类名; (导入xxx包中某个类) 导包语句要注意的细节: 1. 一个java文件中可以出现多句导包语句. 2. "*"是 导包语句的通配符.可以匹配任何 的类名. 3. import aa.*; 是不会作用于aa包下面的子包的. 推荐使