我的python项目有以下目录结构。
.
├── AUTHORS.rst
├── CONTRIBUTING.rst
├── HISTORY.rst
├── MANIFEST.in
├── Makefile
├── README.rst
├── __pycache__
│ └── test.cpython-310.pyc
├── docs
├── logs
├── python_server_copy
│ ├── __init__.py
│ ├── cli.py
│ ├── copy.py
│ ├── python_server_copy.py
│ ├── test.py
│ └── utils.py
├── requirements_dev.txt
├── setup.cfg
├── setup.py
├── tests
└── tox.ini
这是一个基于click
的命令行应用程序。我在文件中定义了包名的导入。例如:
在copy.py
中:
from python_server_copy.utils import get_project_root
然而,这些导入不工作时,我正在测试。我得到ModuleNotFound
错误时,运行文件作为一个脚本直接。我必须删除python_server_copy
包名,每次我正在测试。一切工作正常,如果它是作为命令行点击应用程序运行。
我需要如何正确测试和处理进口的建议. TIA
我使用python 3.7.11,如果有用的话。
1条答案
按热度按时间mlnl4t2r1#
当你在Python中运行一个脚本时,它的目录会被添加到
sys.path
(Python在这里查找模块/包)。现在当你直接运行你的copy.py
时,Parents.../python_server_copy
被添加,加上一些站点包的默认路径等等。因此,*
Parents.../python_server_copy
目录(或任何其他路径)中没有python_server_copy
模块/包 *。相反,您需要添加“its”父目录,它恰好是您项目的根目录,这样它就可以找到您的
python_server_copy
包。您有几个选择:
或者直接导入
utils
,因为它已经可以找到了:最后,由于您只是在进行测试,请使用
PYTHONPATH
环境变量运行脚本: