python包层次结构无法加载,具体取决于我所在的目录

时间:2019-03-14 15:32:42

标签: python

我有一个正在编写的python程序包,看起来像这样:

ls -R ~/foobar/
__init__.py
foo.py
bar/
bar/__init__.py
bar.py

foo.py中,我有以下伪代码。实际的编码更加复杂,因此,我们不要陷入以下事实:我实际上不需要调用bar()

import sys
from bar import bar 

def foo(X,y):
     for i,x in enumerate(X):
         X[i]= y * bar(x)

假设bar.py具有:

import numpy as np
def bar(X):
    return np.cos(X)

如果我位于foobar/目录中,则可以在python解释器中使用

>>> !pwd
/home/me/foobar
>>> from foo import foo

一切正常。但是,如果我进入另一个目录并尝试以下操作,则会收到错误消息:

>>> !pwd
/home/me/bin
>>> import sys
>>> sys.path.append('/home/me/foobar')
>>> from foo import foo
ImportError: No module named bar

现在,我可以通过将foo.py中的import语句更改为以下内容来解决此问题:

from .bar import bar 

它有效。但是,当我回到foobar/目录并尝试导入时,它失败了:

>>> !pwd
/home/me/foobar/
>>> from foo import foo
---> 28 from .bar import bar
ValueError: Attempted relative import in non-package

U!我尝试将'.''..'添加到foo.pybar.py文件开头的路径中,但是没有用。我已经尝试在__init.py__文件中明确说出要加载目录中的内容,即

cat foobar/__init__.py
from foo import *

再次,没有运气。我肯定会丢失一些东西,我也不知道它是什么...

0 个答案:

没有答案