我有以下目录结构。我在.
./ # current directory
__init__.py
module_1/
__init__.py
util
__init__.py # contains f1(), f2(), ...
test.py
下面的python命令可以正常工作
python -c "from module_1.util import f1, f2"
在REPL中运行也可以。
Python 3.8.11 (default, Aug 6 2021, 09:57:55) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from module_1.util import f1, f2
>>>
但是,执行test.py得到了ModuleNotFoundError: No module named 'module_1'
的错误。Test.py只有一行
from module_1.util import f1, f2
运行脚本:
(base) PS C:UsersXsrc> python .module_1test.py
Traceback (most recent call last):
File ".module_1test.py", line 1, in <module>
from module1.util import f1, f2
ModuleNotFoundError: No module named 'module_1'
您可以尝试使用目录的名称"。",我将其命名为DOT dir,并执行如下操作:
from DOT.module_1.util import f1, f2
你可能需要将DOT dir或DOT dir的父目录添加到你的PYTHONPATH变量中。
同时在测试中添加__init__.py
和f1() f2()应该在util.py文件
中./
setup.py
__init__.py
module_1/
__init__.py
util
__init__.py # contains f1(), f2(), ...
test/
__init__.py
test.py
在test.py:
from module_1.util import f1,f2
insetup.py
from setuptools import setup
setup(name='module_1', packages=['module_1'])
"install"[link] withpython setup.py develop
您可以选择将导入添加到module_1/__init__.py
,如下所示:
# module_1/__init__.py
from .util import f1, f2
允许您直接在test.py
# test.py
from ..moduel_1 import f1, f2