具有多个入口点和一个配置文件的Python项目

具有多个入口点和一个配置文件的Python项目,python,config-files,Python,Config Files,我有一个项目,它有多个阶段,每个阶段都有一个main.py和多个入口点,它们都使用相同的配置文件。 比如说, App/ Stage1/ main.py step1.py step2.py utils/ __init_.py util1.py util2.py Stage2/ same structure as Stage1/ configparser.py config.ini READ

我有一个项目,它有多个阶段,每个阶段都有一个main.py和多个入口点,它们都使用相同的配置文件。 比如说,

App/
  Stage1/
     main.py
     step1.py
     step2.py
     utils/
       __init_.py
       util1.py
       util2.py
  Stage2/
    same structure as Stage1/
  configparser.py
  config.ini
  README.md
mains将步骤和utils包导入到它们的目录中。然而,我希望所有的步骤也都是入口点,这样我有时可以测试它们,它们不相互导入,只导入utils包。我以Stage2的不同频率运行Stage1,所以我不希望在root中有BigStage.py。 所有电源和步骤都使用相同的配置文件和configparser.py

但是,在python中,我无法导入顶级文件,我可以通过使用virtualenv或将其添加到PYTHONPATH或使用sys.path来实现。今天我使用的是sys.path.insert(1,“App/”),但这是一个肮脏的解决方案。
最佳做法是什么?

使用标准Python打包。看见基本功能是有一个
setup.py
文件和调用
setuptools
。其余部分取决于项目,取决于您的具体目标。如果您的代码库正在频繁开发,因此重新打包很不方便,您也可以努力摆脱与更改PYTHONPATH相关的内疚和羞耻:^)我以前感觉像您,然后我在一个巨大的,这是一个快速发展的python项目,不断地重新打包会让人非常恼火,我的同事让我相信改变PYTHONPATH是可以的,感觉非常好。你几乎肯定已经用virtualenv做了一系列的环境改变,对吧?无论您的环境激活脚本是什么,它都只是额外的一行。@SaraSinback更好的方法是使用
python setup.py develope
。它将链接到站点包中,这样您就不必在开发时不断地重新打包。使用
PYTHONPATH
会起作用,但会出现再现性问题(我不知道你的
PYTHONPATH
设置为什么,你不知道我的设置为什么,等等)。标准包装避免了“what is your
PYTHONPATH
set to”游戏entirely@MattMessersmith谢谢你的建议-这绝对很酷,我不知道这个功能,我打赌其他人也会从这个建议中受益:)