python 怎么引入上上级目录的文件啊?

2015-01-19 23:09:47 +08:00
 haython
├── jd
│   ├── __init__.py
│   ├── api
│   │   ├── __init__.py
│   │   ├── aa.py
│   │   └── rest
│   │   ├── __init__.py
│   │   └── bb.py
│   └── base.py

不在bb里添加sys.path,怎么从bb里引入base里边的东西?
50892 次点击
所在节点    Python
32 条回复
9hills
2015-01-20 16:24:39 +08:00
@1989922yan 我感觉倒是挺方便的。。。

其实比较推荐的做法是binux那种,直接从顶层往下import,看起来要舒服一些
1989922yan
2015-01-22 09:54:34 +08:00
@9hills
其实,整个问题回答中,
1. 都没有使用 __init__.py,这个文件。
2. 提问者没有指明入口函数。


A:
1. 如果使用__init__.py文件,其中添加自己包的模块:
import mymodule0
import mymodule1
这样做,其他模块,就可以 import my包中的模块了,不再需要考虑 相对引用的问题。

2. 提问者如果指明了入口函数,那么在入口函数中,
首先应该import 跟入口函数同级的模块,
例如:base模块,api模块

个人理解,我的项目结构:

store_management
├── auth
│   ├── __init__.py
│   ├── errors.py
│   ├── models.py
│   ├── views.py
├── base
│   ├── __init__.py
│   ├── codes.py
│   ├── errors.py
│   ├── models.py
│   ├── views.py
├── settings.py
├── start.py
├── static
├── url.py

start.py 为入口函数。auth中,都会调用base包。
auth 和 base是同级,既然加了___init__.py,就把他们两个当做是 两个同级模块好了
9hills
2015-01-22 12:12:28 +08:00
@1989922yan 你这个项目结构本身就是不推荐的,整个store_management 应该做成一个package,然后把start移到外面去。。
9hills
2015-01-22 12:13:55 +08:00
@1989922yan 给你看一个比较规范的Python Web Project:
https://github.com/pythoncn/june
1989922yan
2015-01-22 16:48:50 +08:00
@9hills
ok,我看看
1989922yan
2015-01-22 17:13:14 +08:00
@9hills

参考了一个flask 实践的框架结构,稍等我把我的框架结构调整一下

|-flasky
|-app/
|-templates/
|-static/
|-main/
|-__init__.py
|-errors.py
|-forms.py
|-views.py
|-__init__.py
|-email.py
|-models.py
|-tests/
|-__init__.py
|-test*.py
|-venv/
|-requirements.txt
|-config.py
|-manage.py
1989922yan
2015-01-22 17:16:15 +08:00
9hills
2015-01-22 17:47:12 +08:00
@1989922yan 嗯,就是这个。不过那个app不要叫app,改成你的项目的名字或者代号比较好。

比如上面的june和这个推荐的结构是一样的
Porunga
2016-09-02 01:12:55 +08:00
@rikeinei
我试了一下,好像是
要么 from ... import base
要么 from ..base import XXX

下面这个比上面这个少个点好像
noinlj
2016-12-12 12:43:50 +08:00
导入上级目录

```
import sys
sys.path.append('../')
```
lushiqin
2018-02-08 13:07:59 +08:00
@noinlj 添加不了啊 添加后的结果 sys.path 打印出来的结果是['D:\\pyworkspace\\stock', 'D:\\pyworkspace', 'C:\\WINDOWS\\SYSTEM32\\python27.zip', 'C:\\1tenglu\\Python27\\DLLs', 'C:\\1tenglu\\Python27\\lib', 'C:\\1tenglu\\Python27\\lib\\plat-win', 'C:\\1tenglu\\Python27\\lib\\lib-tk', 'C:\\1tenglu\\Python27', 'C:\\1tenglu\\Python27\\lib\\site-packages', '../']
XuAaron
2018-07-05 14:50:02 +08:00
1、sys.path 看一下项目的目录
2、如果引用的模块在本项目根目录下,可以使用 from dirname import module、import module 或者相对路径 import ..module 来引用(具体看实际情况)
3、如果引用的模块和本项目目录不一致(这种基本不会出现,但是试验的话肯定会出现这种情况),可以使用 sys.path.append(path)(此处的 path 是你要引用的模块的目录),然后就可以使用 import module 引用了

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

https://tanronggui.xyz/t/163653

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

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

© 2021 V2EX