python本地模块

问题描述:

我有几个项目目录,并希望具有特定于它们的库/模块。举例来说,我可能有一个像这样的目录结构:python本地模块

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

假设有一个名为addmyfunctions.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文件的顶部。有没有权利/首选的方式来做到这一点?

+2

你的*更复杂的方法*,你正在修改PYTHONPATH,所以,这是最好的方法 –

+0

直接将'mycode.py'移动到'myproject' –

+0

@Eknath Iyer,你是对的...我不知道是否最好增加'PYTHONPATH'变量directoy(这在技术上与'sys.path'中定义的搜索路径不同)?正如'os.environ [PYTHONPATH] + =':../ mymodules''什么的。 – hatmatrix

不要搞execfilesys.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代码被许多独立和不同的项目使用,那么只需将它自己编译为一个包,然后将其安装到需要使用的任何环境中即可。

+0

谢谢 - 但我只想通过我的项目访问它,并且我希望它是可移植的,这样我只需将“myproject”移动到另一台计算机即可重现它。 myreports /只需要在mymodules中调用函数/而不是其他方式,所以出于这些原因,我不想制作一个系统范围的程序包。 – hatmatrix

+0

所以这可能是“非常神的原因”的情况毕竟...... – hatmatrix

+0

我的建议会让你的“myproject”便携,不需要任何东西,只需要一个标准的软件包设置。 –