2013-02-14 37 views
2

我有一组像这样有组织的Python脚本的:Python内部包装导入 - 如何获得遍布整个包装的常用功能/类?

PythonScripts/ 
    TypeAScripts/ 
     TypeASet1Scripts/ 
      example.py 
     TypeASet2Scripts/ 
    TypeBScripts/ 
     TypeBSet1Scripts/ 
     TypeBSet2Scripts/ 
    TypeCScripts/ 
     TypeCSet1Scripts/ 
     TypeCSet2Scripts/ 
    CommonFunctions/ 
     CommonFunctions.py 

与每个文件夹中init.py。我想要的是能够运行example.py其中example.pyCommonFunctions进口。我想要在文件夹A,B和C中执行相同的脚本。

要使用绝对导入做到这一点,你就会把

import PythonScripts.CommonFunctions.CommonFunctions 

然而,这仅仅在进行PythonScripts是在你的Python路径。其中,如果您只是在该文件夹中运行example.py,则不会如此。你可以加上sys.append(),但这似乎是一个尴尬的做法。有没有更好的方法?

回答

1

Python支持相对导入,但根据我的经验,它们很挑剔,不会做你期望它们做的事情。你可以在PEP 328找到更多关于它们的信息。

我会建议正确打包您的模块并编写一个setup.py文件将其安装到全局站点包目录中。这将允许您使用绝对导入从系统的任何位置引用您的模块,并且您还可以选择将它们注册到Python Package Index (PyPi)以分发给第三方。有关如何做到这一点的好教程是"The Hitchhiker's Guide to Packaging 1.0"

此外,如果你担心borking你的全球网站包目录,我建议你做一个Python virtual environment你的测试安装。 virtualenv工具特别使虚拟环境工作变得简单。