我有一个正在编写的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.py
和bar.py
文件开头的路径中,但是没有用。我已经尝试在__init.py__
文件中明确说出要加载目录中的内容,即
cat foobar/__init__.py
from foo import *
再次,没有运气。我肯定会丢失一些东西,我也不知道它是什么...