Python 希望在我的层次结构的子目录中运行主程序

Python 希望在我的层次结构的子目录中运行主程序,python,Python,我正在从事一个开放源码的Python项目,其中演示程序的数量相当大(并且稳步增加) 我将演示程序移到了名为demo/的子目录中,但是您当然不能直接运行它们-如果这样做,Python会将demo/子目录作为根目录,并且所有项目导入都会失败 我的解决方案是在顶层编写Demo.py程序,让您选择要运行的演示,但该项目的其他开发人员和用户(相当合理地)抱怨必须这样做——他们只想直接运行演示 我没有一个好的解决办法。我最好的办法是在每个演示文件的顶部放一个这样的代码块: if __name__ == '_

我正在从事一个开放源码的Python项目,其中演示程序的数量相当大(并且稳步增加)

我将演示程序移到了名为
demo/
的子目录中,但是您当然不能直接运行它们-如果这样做,Python会将
demo/
子目录作为根目录,并且所有项目导入都会失败

我的解决方案是在顶层编写Demo.py程序,让您选择要运行的演示,但该项目的其他开发人员和用户(相当合理地)抱怨必须这样做——他们只想直接运行演示

我没有一个好的解决办法。我最好的办法是在每个演示文件的顶部放一个这样的代码块:

if __name__ == '__main__':
  import sys
  from os.path import dirname
  sys.path.append(dirname(dirname(__file__)))
这似乎很管用,虽然不雅观

  • 有更好的解决办法吗
  • 如果没有,这个解决方案中是否有我应该注意的明显陷阱

  • 汤姆,我会把这些信息放在这里,以防对其他人有用:可能会让你找到一些有建设性的东西,但是。。我发现不可能为demos目录中的文件生成文档。或者

    pydoc demos/Blur.py
    

    只需运行文件。i、 他们做你想做的事。然而,我不能得到任何文件。它适用于所有其他目录


    Paddy

    为什么需要调用dirname()两次?
    dirname(\uuuu file\uuuu)
    ,包含您正在执行的文件的目录,总是已经在
    sys.path
    中,因此添加它将永远不会有用。在上面描述的示例中,Python脚本驻留在Python主目录的子目录中,因此我需要添加
    dirname(dirname(\uu文件\uu))
    。(请注意,我确实测试了我的解决方案…)
    python -m pydoc -w demos/Blur.py