Python本地模块
我有几个项目文件夹,想要为它们准备一些特定的库或模块。比如,我可能有这样的文件夹结构:
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)
这样做算是最标准的方法吗?我还听说过要修改 PYTHONPATH
(os.environ['PYTHONPATH']
?),这是不是我应该了解的其他内容?
另外,我见过 import
语句放在类的定义里面,也见过放在包含类定义的 Python 文件的最上面。这样做有没有什么正确或更推荐的方式呢?
1 个回答
18
除非有非常好的理由,否则不要随便使用 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
代码被多个独立的项目使用,那么就把它做成一个独立的包,并安装到需要使用的环境中。