python本地模块
问题描述:
我有几个项目目录,并希望具有特定于它们的库/模块。举例来说,我可能有一个像这样的目录结构:python本地模块
myproject/
mymodules/
__init__.py
myfunctions.py
myreports/
mycode.py
假设有一个名为add
在myfunctions.py
功能,我可以从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文件的顶部。有没有权利/首选的方式来做到这一点?
答
不要搞execfile
或sys.path.append
,除非有一些非常好的理由。相反,只需将您的代码安排到proper python packages中,并像进行其他任何库一样进行导入。
如果您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
代码被许多独立和不同的项目使用,那么只需将它自己编译为一个包,然后将其安装到需要使用的任何环境中即可。
你的*更复杂的方法*,你正在修改PYTHONPATH,所以,这是最好的方法 –
直接将'mycode.py'移动到'myproject' –
@Eknath Iyer,你是对的...我不知道是否最好增加'PYTHONPATH'变量directoy(这在技术上与'sys.path'中定义的搜索路径不同)?正如'os.environ [PYTHONPATH] + =':../ mymodules''什么的。 – hatmatrix