Eli*_*Eli 15 python python-2.7
我总是在我构建的每个项目中创建脚本目录,因为它们对于不经常使用的可执行脚本非常有用.在Python中,我总是会__init__.py在我的脚本目录中放置一个脚本,因此我可以将脚本作为包运行(即python -m scripts.some_scripts)并从姐妹目录中加载模块.基于这个以及谷歌搜索,我开始觉得这是一个反模式.
那说,给定一个像这样的结构:
project_dir/
some_modules_dir/
foo.py
bar.py
...
scripts/
some_script.py
other_script.py
...
Run Code Online (Sandbox Code Playgroud)
什么是运行脚本的正确方法,以及从姐妹目录导入脚本的正确方法是some_modules_dir什么?应该包含哪些dirs __init__.py,哪些不应该包含哪些?我想尽可能地遵循PEP8,并希望尽可能简化运行脚本.如果拥有一个脚本目录本身就是不可取的,那么你们又做了什么呢?
问题中的链接仅说明运行在程序包目录中的脚本,这是一个潜在的问题,因为...好吧...程序包不是脚本,脚本不是程序包。它们具有不同的用途,并且以不同的方式调用,因此,如果将它们混合在一起,有时会一团糟。
由于Python 本身已有一个Scripts目录存在很长时间了,而且没有人抱怨,所以它绝不是一种反模式。
请参阅如何将可执行文件与库文件分开?关于我在上一份工作中如何处理可执行脚本。它从未引起我所知道的任何问题。
就我个人而言,__init__.py在脚本中添加一个目录感觉有点不对劲,但我也可以理解为什么它在这里(以及在 IDE 中)很有用。
也就是说,如果它们已经作为 Python 模块运行,那么它们可能不是真正的脚本,无论这意味着什么(相关:你对这些文件有 shebang 吗?)。没有上下文很难说,但也许它们更接近工具模块,构成整个 Python 代码库的一部分。
在这种情况下,通过添加__init__.py项目级别(project_dir在您的示例中),您可以在您的脚本中使用正常导入:
from some_modules_dir import foo
Run Code Online (Sandbox Code Playgroud)
这意味着你的原创绝对python -m scripts.some_script(抱歉)有意义......
| 归档时间: |
|
| 查看次数: |
567 次 |
| 最近记录: |