Python本地模块

9 投票
1 回答
29425 浏览
提问于 2025-04-17 04:07

我有几个项目文件夹,想要为它们准备一些特定的库或模块。比如,我可能有这样的文件夹结构:

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

假设在 myfunctions.py 里有一个叫 add 的函数,我可以用最简单的方法在 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 文件的最上面。这样做有没有什么正确或更推荐的方式呢?

1 个回答

18

除非有非常好的理由,否则不要随便使用 execfilesys.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 代码被多个独立的项目使用,那么就把它做成一个独立的包,并安装到需要使用的环境中。

撰写回答