导入上级目录中的某个模块 module, import 路径要怎么写?

2019-02-10 12:54:53 +08:00
 miniyao

项目结构:

Project
    \app
    config.py
    \sdk\api\demo.py

Project 在测试机和生产机中的系统路径不一样,所以不能写绝对路径。
要在 demo.py 中调用 config.py 中的配置参数 PARAM 要怎么写 from ... import PARAM 的路径?

# config.py

PARAM = foo
3871 次点击
所在节点    Python
10 条回复
zizhoutong
2019-02-10 12:57:17 +08:00
当前目录是. 上级目录是.. 吧
shiroming
2019-02-10 13:06:13 +08:00
```
import sys
sys.path.append("..")
```
miniyao
2019-02-10 13:06:52 +08:00
@zizhoutong \sdk\api\...\demo.py 中间路径好多层,我省略了只写了一层 \api\
全部用 . 表示,估计有 五六个 ...... ,会失效吗?
miniyao
2019-02-10 13:08:10 +08:00
@shiroming sys.path.append("..") 超出两个 .. 的 append,会有用吗?
Trim21
2019-02-10 13:09:58 +08:00
@miniyao #4 你把 project 路径添加到 path 里, 然后直接 import config 就可以了
Trim21
2019-02-10 13:12:13 +08:00
@Trim21 #5 用 os.path 动态计算出 project 的绝对路径, 不要硬编码一个绝对路径就能解决你说的这个"Project 在测试机和生产机中的系统路径不一样"的问题了
shiroming
2019-02-10 13:22:08 +08:00
@Trim21 对的。只需要添加项目根目录到 PATH 就可以了
miniyao
2019-02-10 13:34:42 +08:00
@Trim21
@shiroming

这个 demo 点 py 的路径已经被我 sys.path.append("./sdk/api/") 过了,然后,我想在这个 demo 点 py 中写个函数,要调用 上层的 config 点 py 中的 PARAM,( project 的路径已经添加到 path 里了)导致在 demo 点 py 中直接 import config 就变成了是在 append()过的路径中导入了。
huntzhan
2019-02-10 14:07:40 +08:00
请使用 package 机制
butterfly1211
2019-02-11 15:18:50 +08:00
直接从项目根目录开始就可以了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/533687

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX