Python包命名和导入

2024-04-25 06:35:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个叫foo的包裹。其组织如下:

package_dir/foo/foo.py
package_dir/foo/utils.py
package_dir/foo/other.py
package_dir/foo/__init__.py

我应该给你起个名字foo.py公司除了这个库之外的其他东西已经随着时间的推移而增长和进化,现在支持其他东西,并且被广泛使用。这个包被捆绑并存储在我们的内部pipy服务器上,这样在安装之后,我就得到了/usr/lib/python2.7/site-packages/foo。你知道吗

从这个包裹进口的最好方法是什么?你知道吗

目前我这样做:

import foo

然后我在客户端代码中完成了这项工作:

foo.foo.myfunction()

有许多类和函数可以使用这种方法:

from foo import blah, blah, blah

这有点麻烦。这是一个pythonic方法包?有没有更好的办法?你知道吗

谢谢你的帮助。你知道吗

*更新*

所以我做了这个,但没有找到我的函数:

from __init__.py:

import foo
import utils
import other

然后我像这样导入:

import foo

在我的代码中我尝试过:

foo.myfunc()

还有:

myfunc()

两人都抱怨:

AttributeError: 'module' object has no attribute 'myfunc'

Tags: 方法函数代码frompyimportpackagefoo
1条回答
网友
1楼 · 发布于 2024-04-25 06:35:42

你有一些选择:

from foo import foo
foo.myfunction()

或者

from foo import foo as something
something.myfunction()

或者

import foo.foo as something
something.myfunction()

或者您可以“升级”一些api,以便从顶层发布它们。在foo/__init__.py中导入它们,然后可以从包对象中使用它们。例如,新的foo/__init__.py可以是:

from .foo import myfunction

请注意显式的相对导入语法,以避免顶级foo包和嵌套foo包之间的歧义。你知道吗

然后你可以写:

import foo
foo.myfunction()

等等。你知道吗

相关问题 更多 >