记一次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`的前面加上以下几行代码
```python
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,即
```python
import sys
sys.path.append("/xxx/xxx") # src的上级目录,注意最后面没有/
```
问题完美解决
### 小结
1)导包时要将导包路径加到`sys.path`里面
2)如果导的包里还导入了其他的包,那么需要特别注意是否所有包都能找到路径
最新文章
- Linux环境变量设置
- Git命令之资源
- Java编程中“为了性能”尽量要做到的一些地方
- VideoView 播放资源目录raw下的视频
- JavaScript Number 对象 Javascript Array对象 Location 对象方法 String对象方法
- Cas_Server端安装
- Scala Error: error while loading Suite, Scala signature Suite has wrong version expected: 5.0 found: 4.1 in Suite.class
- 一个sql的优化
- Android 初了解
- Haskell学习-functor
- v-for 在 VSCode 中出现 Elements in iteration expect to have 'v-bind:key' directives.
- Linux环境上部署Flask
- angularjs-select2的使用
- Linux运维之shell脚本进阶篇
- Kubernetes 架构图
- mycat 单库分表
- 在ListBoxItem的样式中的button传参,把当前选中项传递到命令的方法
- 2018.09.30 bzoj2223: [Coci 2009]PATULJCI(主席树)
- Angular总结一:环境搭建
- SSMdemo:租房管理系统
热门文章
- # Python3微博爬虫[requests+pyquery+selenium+mongodb]
- JavaWeb应用系统开发实训任务(一)
- Spring Boot源码分析-启动过程
- APOC官网触发器示例执行后Web页面一直转圈
- [C#.net]xlApp.Workbooks.Open打开无法远程访问
- unity 打包Error:WebException: The remote server returned an error: (403) Forbidden.
- std::list保存大量数据时,类型即是无析构函数,该list析构时会占用大量CPU
- vue打开到新页面,并传递参数
- mybatis抛出异常(java.sql.SQLException: Incorrect string value: '\xF0\x9F\x92\x94' for column 'name' at row 1)
- javascript学习方法指南