root <folder>
├ config.py
├ main.py
└ toolbox <folder>
├ get_data.py
└ analyze_data.py
1
imn1 2019-10-31 15:45:43 +08:00
每层加个 __init__
怎么写?看手册或别人的例子 /文章 |
2
JCZ2MkKb5S8ZX9pq OP @imn1 嗯,init 有的,手打的目录结构,忘加了。
|
3
JCZ2MkKb5S8ZX9pq OP 我目前所知的几种方法
- from ..config import * 只能从根目录运行,我想写模块的时候直接^B 运行。 - sys.path.append 放在 import 前面,不符合 pep8。(当然也可以把格式检查关了) - 把所有常量都设为参数往里传,很麻烦,有些也需要全局。 |
4
JCZ2MkKb5S8ZX9pq OP try:
from ..config import * except ValueError: import sys sys.path.append('../') from config import * 写成这样也行,就是看上去非常罗嗦。。。 |
5
ClericPy 2019-10-31 16:25:45 +08:00
还是好好理解一下包和模块的概念吧... 很多相对引用其实也会被 linter 划红线(我就经常用 ..)
功能统一写到 package 里 调用统一在包外(这样 cwd 就不会乱了), 就算是包内常见调用, 也可以在包里写好 main, 在包外调用, 更清晰直观一点. 包内引用就可以只用相对引用了 总之尽可能别用 sys.path append 的方式吧. 对于一个靠谱的 IDE / 编辑器, 在项目根目录执行也就是一个快捷键的事 |
6
JCZ2MkKb5S8ZX9pq OP @ClericPy 你倒提醒我了,我去看看 IDE 有没有从根目录执行的办法。
|
7
ClericPy 2019-10-31 16:51:17 +08:00
@JCZ2MkKb5S8ZX9pq python3.3 以后 __init__.py 也不是必须的了, 总之就是尽量不要在包内做那些奇怪的引用, 不然那跟普通文件夹还有什么区别 (虽然我超喜欢这种操作, 在 if __main__ 里... 不过都是 utils.py 这种不引用包内其他模块的前提下)
我的 vscode 里 code runner 默认还是在项目根目录来着, 后来被我改成的从当前文件执行... |
8
JCZ2MkKb5S8ZX9pq OP @ClericPy 主要是主程序跑的时候还行,但写的过程中有点麻烦。
可是也不想施工时候一套,竣工之后又一套,就想问看看有没有什么好方法。 PS:我 if main 里面以前也是火葬场,后来慢慢理干净了一点,但还在摸索,尚不完善。 |
9
Hopetree 2019-10-31 17:21:11 +08:00
变成包啊,不要搞目录,用包,包引用就比较好,而且不容易出错
|
10
ipwx 2019-10-31 19:42:51 +08:00
Short answer:
在 root 目录内,运行:python -m toolbox.get_data.py Long answer: 最好用一个 CLI 框架,比如 click,然后写 setup.py ,安装你的所有命令行入口点为一个独立的程序。 |
11
ipwx 2019-10-31 19:43:16 +08:00
错了,python -m toolbox.get_data
|
12
JCZ2MkKb5S8ZX9pq OP @ipwx sublime text 可以自己编辑 build 的方式,但貌似没办法转成这个格式。
目录和文件名都能取到,但在 build 配置文件里不知道怎么写。 |
13
rogwan 2019-10-31 20:48:59 +08:00 via iPhone
写一个 Config 基类,再分别写 xxConfig 子类,最后在再 config 方法
|
14
ipwx 2019-10-31 23:35:15 +08:00
@JCZ2MkKb5S8ZX9pq setup.py 是 Python 标准的包安装文件。。。和具体某个 IDE 无关。
比如我这个项目: https://github.com/haowen-xu/ml-essentials 的 setup.py ,指定把 mltk.mlrunner 模块(即 mltk/mlrunner.py )中的函数 mlrun 做成命令行程序。 https://github.com/haowen-xu/ml-essentials/blob/master/setup.py#L62 https://github.com/haowen-xu/ml-essentials/blob/master/mltk/mlrunner.py#L691 |
15
JCZ2MkKb5S8ZX9pq OP @ipwx 配合你的提醒,我去官方论坛问了下,有个老哥直接给撸了段插件,搞定了。
[How can I create a new build system to run python from project root? - Technical Support - Sublime Forum]( https://forum.sublimetext.com/t/how-can-i-create-a-new-build-system-to-run-python-from-project-root/47461) 爱死这个老哥了,自己摸 sublime 这些魔改的地方不知道要摸多久了。 |
16
JCZ2MkKb5S8ZX9pq OP |
17
JCZ2MkKb5S8ZX9pq OP |