如何创建不需要专门导入单个模块的python包?

达斯汀

抱歉,我觉得这是一块破旧的领域,但我看上去很努力,而且仍在导入我编写的python模块方面仍处于挣扎中。更具体地说,如果直接导入,则只能引用模块。为了与其他软件包兼容,我需要使用python-2.7。

例如,对于软件包brcfiles。

brcfiles的文件结构:

brcfiles/
   LICENSE
   README.md
   setup.py
   brcfiles/
      __init__.py
      files.py
      samples.py

init .py的内容

$ cat /path_to_pkg/brcfiles/brcfiles/__init__.py
__all__ = ['files', 'samples']

我的.bash_profile包含以下行(我尚未pip安装brcfiles,但仍在开发中):

export PYTHONPATH=$PYTHONPATH:/path_to_pkg/brcfiles

如果我分别加载模块,则可以实现所需的行为,并且可以访问模块内容。

>>> import brcfiles.files
>>> brcfiles.files
<module 'brcfiles.files' from '/path_to_pkg/packages/brcfiles/brcfiles/files.pyc'>

但是,如果导入整个程序包,则无法引用单个模块。

>>> import brcfiles
>>> brcfiles.files
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'files'

FWIW,以下工作有效,但我不喜欢此方法创建的名称空间问题。

>>> from brcfiles import *
>>> files
<module 'brcfiles.files' from '/path_to_pkg/packages/brcfiles/brcfiles/files.pyc'>

上面的解决方案暂时可以使用,但是我觉得这个问题是我做错事情的征兆。这很可能是我未来许多生物信息学管道的基石,因此我希望正确完成它。显然,我对创建python软件包不是很陌生,所以衷心感谢那些花时间提供帮助的人!

第55章

我认为您误解了import命令的语法。
import brcfiles.files从包brcfiles导入模块“文件”:从包brcfiles
import brcfiles导入包(即,init .py中的代码from brcfiles import *:从包brcfiles导入所有模块(文件,示例)。
您不能先导入brcfiles,然后再导入brcfiles.files。因为该语句仅导入brcfiles(_ init),而不导入brcfiles中的其他模块。
当您执行brcfiles.files时,它开始在brcfiles的初始化中寻找方法或属性'files',因此出现上述错误。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章