首先让我说我已经对过去一周的过程进行了广泛的研究,但还没有找到这些问题的实际答案 – 只是一些模糊的答案并没有真正解释正在发生的事情.如果这只是因为我错过了我想要的东西,我很抱歉 – 请指出我正确的方向.
我的目录结构是:
TestProject/
runtest*
testpackage/
__init__.py
testmod.py
testmod2.py
testsubs/
testsubmod.py
几个笔记:
>我在Ubuntu上使用python2.7
>我正在测试bpython
>我正在从特定目录运行bpython来测试导入行为的方式
>我正在尝试遵循最佳做法.
>此软件包未安装,它位于随机开发目录中
>此目录不在pythonpath中
>我在包目录中有一个init.py.
>嵌套目录中没有init.py文件
> init.py文件为空
> testpackage / testmod.py包含TestModClass
> testpackage / testsubs / testsubmod.py包含TestSubModClass
我观察到的事情:
>当我从TestProject / import testpackage运行bpython时
>这不会导入testpackage.testmod
>我根本无法访问testpackage.testmod
>当我从TestProject / import testpackage.testmod运行bpython失败时
>当我从testProject运行bpython /从testpackage导入testmod工作
>我可以向init.py添加代码以显式导入testmod.py,但不能testubs / testmod.py
>我不认为这是正确的方法,如果用户不想导入该模块怎么办?
>从testmod.py我可以导入testmod2,但不能导入testpackage.testmod2
>这样做很好,我可以使用STL或扭曲的名称(例如testpackage.logging)命名我自己的模块而不会导致错误(很糟糕的是必须将自己的模块命名为客户日志,而不仅仅是mypackage .logging)
问题是:
> python与包装上的进口有什么不同吗? pythonpath中存在的模块比尝试从当前目录导入时要多?
>为什么不导入testpackage让我访问testpackage.testmod?当我导入操作系统时,我可以访问os.path(etc).
>使用包,我应该坚持在基目录中使用单个init.py,还是应该将它们嵌套在后续目录中?
>如何导入指定包名称的模块? I.E.从testmod.py,我想导入testpackage.testmod2而不仅仅是testmod2.
>从subsubs目录导入子模块的正确方法是什么?
>我看到的唯一解决方案是将该目录从init.py附加到pythonpath,但我不知道这是否正确.
提前致谢.