我正在为 python 脚本安装创建一个安装文件。通常,文档使用例如下一个安装文件:
from setuptools import setup
# setup.py file
setup(name='test',
version='0.0.0',
packages=['test'],
entry_points={
'console_scripts': [
'test = test.test:main'
]
},
)
将此称为:
# test/test.py file
def main():
print('Hello!')
if __name__ == '__main__':
main()
但是,我的问题是我的“主”代码函数位于 if __ name__ == '__ main __' 条件之下。我无法创建 main() 函数,因为这代表了开发工作的巨大变化
有什么解决办法吗?或者我必须花时间创建一个 main() (或任何名称)函数?
据我了解,您有一堆代码,您只想在未导入文件时调用这些代码(这就是 if 语句的作用)。但是,我敢肯定,在每行之前添加一个制表符会非常烦人。
解决方案:使用类似于 this 的内容(如果您有 Linux,则可以使用;当然还有替代解决方案),即
sed -i 's/^/\t\t/' <filename>
位于单独的文件中,并将主代码复制粘贴到其中以添加选项卡。将此选项卡式代码复制粘贴到您的 def main():
中,瞧。
但是,看起来这只是要导入的,这就是您使用 setup.py 文件的原因......在这种情况下您不需要这样做,因为大概您想要这段代码运行,这就是你导入它的原因。 (除非是一些测试的东西。)
您可以使用以下
run_module
帮助程序将模块作为函数运行
# run_module/__init__.py
import runpy
from dataclasses import dataclass
def __getattr__(name: str):
return _RunModule(name)
@dataclass
class _RunModule:
module: str
def __getattr__(self, name: str) -> "_RunModule":
return _RunModule(f"{self.module}.{name}")
def __call__(self) -> None:
runpy.run_module(self.module, run_name="__main__")
给定一个可以与
my_package.my_module
一起运行的模块 python -m my_package.my_module
,通过 run_module
帮助程序,您可以使用 run_module:my_package.my_module
作为 console_scripts
入口点。