2016-03-28 119 views
4

我想在Python中创建一个包含多个需要互操作的子包(我不确定这是否合适)。在Python中创建一个包含多个子包的包

我有一个(简单的)结构是这样的:

/package 
    |-script1.py 
    |-script2.py 
    |-subpackage1 
    | |-__init__.py 
    | |-src 
    | | |-__init__.py 
    | | |-my_program.py 
    | | |-functions.py 
    | | |-... 
    | 
    |-tests 
    | |-a_tests.py 
    |-subpackage2 
    | |-web-server.py 
    | |-API 
    | | |-__init__.py 
    | | |-REST.py 
    | | |-... 
  • package/subpackage2需要能够(使用pytests)来调用package/subpackage1/src/functions.py
  • package/tests电话都子包。
  • package/subpackage1/src/functions.py需要能够内subpackage1

调用其它模块我已经看到了这样的回答:https://stackoverflow.com/a/33195094 - 这说明了什么,我需要做的(创建包),但它并没有解释如何来做到这一点。

我可以很容易地得到两个scripts称他们的组件子包使用:

import subpackage1.src.my_program.py

(即类似建议here),但随后my_program.py失败,并ImportError: No module named 'functions'

所以,我需要用什么胶水来设置这个结构?

+0

的'subpackage1'必须具有'__init __ py'是检测为模块。你在'src'中加了'__init __。py',但没有在'subpackage1'中。 –

+0

@GIRISHRAMNANI - 谢谢。我间歇地有一个在那里,但不知道是否有必要。在那里有一个似乎没有改变任何东西;所以需要其他一些东西来...... –

回答

2

所以解决这个问题,我创建了一个类似的文件夹结构

/package 
    |-script1.py 
    |-subpackage1 
    | |-__init__.py 
    | |-src 
    | | |-__init__.py 
    | | |-functions.py 

我script1.py文件有

import subpackage1 
import subpackage1.src 
import subpackage1.src.functions as f 


print(f.hello()) 

functions.py文件有

def hello(): 
    return "from the functions" 
现在从 package

文件夹

我做

$ python script1.py

脚本运行和输出

from the functions

显示。

我使用python3

所以我失去了一些东西,因为它在我的系统上工作。

注意:我添加了三个不同的imports来检查那里的导入错误。

3

如果你想从functions.py导入my_program.py然后在my_program.py你必须指定绝对导入路径。

假设functions.py包含以下功能:

def function1(): 
    print('foo bar') 

然后,从functions.py导入function1my_program.py其内容应该是这样的:

from subpackage1.src.functions import function1 

function1() 
1

my_program.py

添加import subpackage1.src.functions as f当你运行模块时,站在package文件夹并运行如下:

python -m subpackage1.src.my_program