用设置环境组织python项目

时间:2016-04-29 09:32:39

标签: python bash environment-variables

我开发Python工具。每个工具都是编程项目的一部分,包含用于启动程序的源文件和脚本。这里的语言是Python,但也可以是其他语言。

src/
  package1/
    module1.py
  package2/
    module2.py
scripts/
  program1.py  # parses arguments; uses modules; starts workflow.
  program2.py  
  pylauncher.sh  # sets environment; deals with output; calls any specified python script. 

每个Python脚本获取用户的输入,解析提供的参数,并使用相关的Python模块启动例程。最后,用户必须以这种方式调用脚本:

$ cd path/scripts
$ python program1.py arg1 arg2

或者,取决于解释器版本,

$ cd path/scripts
$ path/to/the/right/python program1.py arg1 arg2

目前我还有一个bash脚本pylauncher.sh,我用它来设置Python路径,Python库,将输入重定向到日志等等。因此用户不必指定所有这些并且必须启动命令:

$ cd path/scripts
$ ./pylauncher program1.py

这很方便,因为它隐藏了用户的环境内容。但在我看来,也许用户不应该打电话给发射器。所以我想摆脱python脚本程序{1,2} .py并将pylauncher.sh重命名为program {1,2} .sh。这样做,以前的程序{1,2} .py中使用的例程将被转移到模块的主函数中,或者只是移动到那里。

项目结构如下:

src/
  package1/
    module1.py
    program1.py  # parses arguments; use python modules; starts the program workflow.
  package2/
    module2.py
    program2.py
scripts/
  program1.sh  # sources set_environment.sh; calls program1.py
  program2.sh  # sources set_environment.sh; calls program2.py
  set_environment.sh

或者让脚本文件夹中的程序{1,2} .py:

src/
  package1/
    module1.py
  package2/
    module2.py
scripts/
  program1.py  # parses arguments; starts the program workflow.
  program1.sh  # sources set_environment.sh; calls program1.py
  program2.py
  program2.sh  # sources set_environment.sh; calls program2.py
  set_environment.sh

用户最终必须使用以下命令:

$ cd path/scripts
$ ./program1.sh  

所以我目前正在使用pylauncher bash脚本的第一个解决方案,我正在考虑改用第二个解决方案。但是,我想知道其他软件开发人员的习惯,习惯和做法。你会怎么做?对于用户和开发人员,您是否看到了更方便的方式,如果可能的话,可以避免冗余?欢迎任何建议和评论。

1 个答案:

答案 0 :(得分:1)

您是否考虑将这些工具打包为单个文件可执行文件?

这是我使用pyinstaller的一个非常基本的例子,我在Linux系统上,但该工具是跨平台的,并且看起来很好。

要求(用于构建的python头和用于安装包的PIP)

sudo apt-get install python-dev python-pip
sudo pip install pyinstaller 

要构建的文件

kalvatn@workstation|/tmp/python-executable » cat hello.py
#!/usr/bin/env python

if __name__ == '__main__':
    print 'hello world'

usage(-F标志指示pyinstaller创建单个文件可执行文件)

kalvatn@workstation|/tmp/python-executable » pyinstaller -F hello.py
kalvatn@workstation|/tmp/python-executable » ./dist/hello
hello world

文档