提问者:小点点

为什么我不能同时从模块目录内和模块目录外导入模块?


我目前的项目有如下结构:

src:
   file1.py
   file2.py

file2中有一些函数我想导入到file1中并使用。 因此文件1有以下几行:

from file2 import func1, func2

在src目录中运行终端时,键入:

from file1 import *

一切都很顺利。 但是,当转到目录src之外并键入python终端时

from src.file1 import *

出现以下错误:

    Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/bhavincvts/Desktop/greenleap/solarAFD1/src/file1.py", line 3, in <module>
    from file2 import func1, func2 
ModuleNotFoundError: No module named 'file2'

之后,我尝试将import语句更改为,

from .file2 import func1, func2

然后,它在src文件夹之外可以很好地工作。 但在src文件夹内运行终端时,它显示以下错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/bhavincvts/Desktop/greenleap/solarAFD1/src/file1.py", line 3, in <module>
    from .file2 import func1, func2 
ImportError: attempted relative import with no known parent package

有办法解决这个问题吗?


共2个答案

匿名用户

明白了;

文件1.py:

from file2 import func1, func2
func1()
func2()

file2.py具有以下功能:

def func1():
    print('yeeeeah func1')

def func2():
    print('yeeeah func2')

src:__init__.py文件1.py文件2.py

来自SRC:

src$ python file1.py 

打印:

yeeeeah func1
yeeeah func2

从别的地方:

src$ cd ..
test_stack$ python src/file1.py 

打印:

yeeeeah func1
yeeeah func2

假设src是您的主目录(其中有setup.py requirements.txt等)

匿名用户

在file1中,从file2导入函数之前,可以指定file2的目录:

import sys
sys.path.append("/path_to_the_directory_that_can_find_file2")

from file2 import func1, func2

这将使它在src目录之外运行时更加健壮。