如何通过something/blah调用Poetry脚本入口?配置报错求助
Poetry脚本配置:解决
something/blah调用入口点的问题 问题原因
直接用"something/blah"作为脚本名会报错,核心原因是操作系统不允许文件名包含斜杠——Poetry会尝试在虚拟环境的bin目录下创建something/blah这个可执行文件,但斜杠会被识别为目录分隔符,而something并不是已存在的目录,因此触发了"找不到文件或目录"的错误。
可行解决方法
方法1:用无斜杠命名替代(最简单)
把脚本名改成下划线或连字符形式,绕过文件名限制:
[tool.poetry.scripts] something_blah = 'x.q.p:entrypoint'
之后直接运行something_blah就能调用目标入口点。
方法2:主命令加参数实现类似调用形式
如果想要保留类似something blah的调用逻辑,可以修改入口点函数支持参数,再配置主脚本:
[tool.poetry.scripts] something = 'x.q.p:entrypoint'
然后在x.q.p模块的entrypoint函数里处理参数:
def entrypoint(): import sys if len(sys.argv) > 1 and sys.argv[1] == "blah": # 执行原本的入口逻辑 pass
之后运行something blah就能触发对应逻辑。
方法3:自定义shell包装脚本(严格匹配something/blah形式)
如果一定要用something/blah的调用路径,可以手动在虚拟环境中创建目录和脚本:
- 在虚拟环境
bin目录下创建something子目录:
mkdir -p .venv/bin/something
- 在
something目录下创建blah脚本,内容如下(替换为你的入口点路径):
#!/bin/bash "$(dirname "$0")/../python" -m x.q.p
- 给脚本添加执行权限:
chmod +x .venv/bin/something/blah
之后就能运行something/blah调用入口点,不过这种方法需要手动维护,不如前两种便捷。
内容的提问来源于stack exchange,提问作者Andre Gagne
相关产品推荐
相关产品推荐

