运行Python脚本的最佳实践是什么?

4
我正在开发一些脚本,计划在我的实验室中使用。目前我已经在我的工作站(即开发工作站)上仅本地安装了Python和所有必需的模块。
我想能够通过我的实验室站点执行我开发的脚本。如何做到最佳实践?我需要在所有站点上安装相同的环境(当然不包括IDE),如果是这样,那么推荐的安装方式是什么?
另外,是建议从命令行屏幕(Windows)运行这些脚本,还是有其他更优雅的方法?

这些脚本通常只需使用“python”命令运行?需要安装在多少台计算机上?使用的操作系统是什么? - Grimmy
你如何想象自己运行它们?这些信息非常有用,因为我们不知道你的脚本是否是任何框架的一部分,还是独立的脚本。 - Grimmy
我至少还有3个站点。它们全部都是Windows 7或10站点。它们目前是独立的,但我已经可以看到它们将成为py.test框架的一部分。 - Moshe S.
懒人方法:只需将git repo拉到所有计算机上即可。稍微高级一点:在其中一个计算机上安装devpi,并使用它作为软件包管理器,以便您可以使用pip将软件安装为软件包在其他计算机上。 - Grimmy
3个回答

4
您应该将这些脚本打包起来:

https://python-packaging.readthedocs.io/en/latest/

并使用其中一种定义软件包内脚本的内置方法:

http://python-packaging.readthedocs.io/en/latest/command-line-scripts.html?highlight=scripts

这将帮助您维护脚本。 您可以为软件包版本化,这非常有用,因为您可能会出现错误(我们都写错了),并且您将在更新版本中修复它们。 此外,安装/升级软件包比管理多个独立脚本容易得多。

至于编写脚本时的一些“最佳实践”,我建议:

1)为代码编写单元测试:http://python-guide-pt-br.readthedocs.io/en/latest/writing/tests/

2)不要在__name__检查下放置任何逻辑。 如果有什么问题,请将所有逻辑封装在名为main的函数中,在__name__检查下调用该函数。

不好的做法

  if __name__ == '__main__':
       foo = thing()
       args = get_args()
       try:
           blah()
       except DerpError:
           handle_derp()

好的

if __name__ == '__main__':
    main()

打包我的脚本只需要工作站安装了Python,对吗? - Moshe S.
不,您需要在所有机器上安装Python。 您可以使用该软件包解决脚本中存在的任何依赖模块,如果这些机器可以访问互联网,则会自动下载和安装:http://python-packaging.readthedocs.io/en/latest/dependencies.html?highlight=requirements - willnx

0
如果您想在多台计算机上运行单个脚本而不必在每台计算机上安装Python,您可以使用py2exe、cx_Freeze或PyInstall将脚本“编译”为.exe文件。实际上,“编译”会将Python和库打包到生成的.exe文件或相关文件中。
但是,如果您计划运行许多Python脚本,最好在每台计算机上安装Python,并将您的脚本和库作为Python包(例如eggs或wheels)分发。

0

@moshe,如果您在所有这些计算机上都拥有管理员特权,则建议安装目前业界标准的Anaconda Python发行版。它附带Jupyter Notebook,这是一个非常有价值的工具,可用于编写、保存和共享代码,以及其他方便的功能,如数据可视化。

另外,您可以简单地启动一个Amazon AWS免费套餐Linux实例,设置Python,然后只需使用实验室计算机上的shell通过ssh进入该实例即可。如果您正在使用其他人可以安装软件并可能破坏您的环境设置的共享计算机,则此方法可能更为适合。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接