如何解决使用setuptools安装脚本的与操作系统无关的脚本
我目前正在尝试解决有关在setuptools
分发的python项目中安装脚本的问题。
脚本之一是
#! /usr/bin/env python3
"""Terminal querying utility."""
from homeinfotools.query.main import main
if __name__ == '__main__':
main()
位于<projectdir>/scripts/sysquery
。
设置脚本位于<projectdir>/setup.py
上,包含以下内容:
#! /usr/bin/env python3
"""Installation script."""
from pathlib import Path
from setuptools import setup
setup(
name='homeinfotools',version_format='{tag}',author='HOMEINFO - Digitale informationssysteme GmbH',author_email='REDACTED',maintainer='Richard Neumann',maintainer_email='REDACTED',python_requires='>=3.8',install_requires=['setuptools-git-version','requests'],packages=[
'homeinfotools','homeinfotools.query','homeinfotools.rpc','homeinfotools.vpn'
],scripts=[str(path) for path in Path('scripts').iterdir()],license='GPLv3',description='HOMEINFO Digital Signage Linux configurator.'
)
现在我面临的问题是,安装通过
python setup.py install --optimize=1
在Windows和Linux系统上具有不同的行为。 这些脚本会在Windows和Linux上安装到正确的路径中。
- Windows:
<pythondir>\Scripts\sysquery
- Linux:
<prefix>/bin/sysquery
不幸的是,我无法以这种方式在Windows下调用脚本。会产生“找不到命令”错误(德语语言环境):
C:\Users\HOMEINFO GmbH>sysquery
Der Befehl "sysquery" ist entweder falsch geschrieben oder
konnte nicht gefunden werden.
C:\Users\HOMEINFO GmbH>
在Windows上安装后的脚本内容为:
#!"C:\Program Files\python39\python.exe"
# EASY-INSTALL-SCRIPT: 'homeinfotools==0.0.0','sysquery'
__requires__ = 'homeinfotools==0.0.0'
__import__('pkg_resources').run_script('homeinfotools==0.0.0','sysquery')
PATH
没问题,因为我可以在同一目录中运行其他脚本。
我将错误归结为一个事实,即Windows似乎需要在脚本上使用.py
后缀才能调用它们。
如果我相应地更改了脚本名称,则会在Scripts
目录中获得两个脚本:
sysqery
#!"C:\Program Files\python39\python.exe"
# EASY-INSTALL-SCRIPT: 'homeinfotools==0.0.0','sysquery')
sysquery.py
#!"C:\Program Files\python39\python.exe"
# EASY-INSTALL-SCRIPT: 'homeinfotools==1.0.5','sysquery.py'
__requires__ = 'homeinfotools==1.0.5'
__import__('pkg_resources').run_script('homeinfotools==1.0.5','sysquery.py')
在这种情况下,我可以从命令行正常运行命令sysquery
。
但是,这留下了问题,那就是在Linux系统上,脚本也将带有.py
后缀,这是不希望的。
因此,我在setup.py
中提出了一个特定于操作系统的解决方案,该解决方案虽然有效,但很丑陋:
#! /usr/bin/env python3
"""Installation script."""
from os import name
from pathlib import Path
from setuptools import setup
SCRIPTS = Path('scripts').iterdir()
if name == 'nt':
SCRIPTS = [path.rename(f'{path}.py') for path in SCRIPTS]
setup(
name='homeinfotools',scripts=[str(path) for path in SCRIPTS],description='HOMEINFO Digital Signage Linux configurator.'
)
是否可以在不带后缀的情况下安装与操作系统无关的脚本,而不必在os的上下文中重命名它们?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。