8

我有几个项目目录,并希望拥有特定于它们的库/模块。例如,我可能有这样的目录结构:

myproject/
  mymodules/
    __init__.py
    myfunctions.py
  myreports/
    mycode.py

假设有一个调用addin的函数myfunctions.py,我可以mycode.py用最简单的例程调用它:

execfile('../mymodules/myfunctions.py')
add(1,2)

但要更复杂一点,我也可以

import sys
sys.path.append('../mymodules')
import myfunctions

myfunctions.add(1,2)

这是最惯用的方法吗?还有一些关于修改PYTHONPATHos.environ['PYTHONPATH']?)的提及,但这是我应该研究的还是其他事情?

此外,我还看到import了包含在类语句中的语句,在其他情况下,这些语句定义在包含类定义的 Python 文件的顶部。有没有正确/首选的方法来做到这一点?

4

1 回答 1

15

不要乱来,execfile或者sys.path.append除非有很好的理由。相反,只需将您的代码安排到适当的 python 包中,然后像对任何其他库一样进行导入。

如果你mymodules实际上是一个大型项目的一部分,那么像这样设置你的包:

myproject/
    __init__.py
    mymodules/
        __init__.py
        myfunctions.py
    myreports/
        __init__.py
        myreportscode.py

然后您可以从代码中的任何位置导入mymodules,如下所示:

from myproject.mymodules import myfunctions
myfunctions.add(1, 2)

如果您的mymodules代码被许多独立且不同的项目使用,那么只需将其制作成一个单独的包并将其安装到需要使用的任何环境中。

于 2011-10-11T23:38:03.737 回答