簡體   English   中英

Python中如何正確設置導入?

[英]How to set up imports correctly in Python?

我的 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的命令行應用程序。 我在名稱為 package 的文件中定義了導入。 例如:

copy.py

from python_server_copy.utils import get_project_root

但是,這些導入在我測試時不起作用。 直接將文件作為腳本運行時出現ModuleNotFound錯誤。 每次測試時,我都必須刪除python_server_copy package 名稱。 如果它作為命令行點擊應用程序運行,一切正常。

我需要有關如何正確測試它和處理導入的建議。 TIA

如果有用的話,我正在使用 python 3.7.11。

當您在 Python 中運行腳本時,其目錄將被添加到sys.path (Python 查找模塊/包的位置)。 現在,當您直接運行copy.py時,會添加Parents.../python_server_copy以及站點包等的一些其他默認路徑。

因此, Parents.../python_server_copy目錄(或任何其他路徑)沒有python_server_copy模塊/包。

相反,您需要添加恰好是項目根目錄的“它的”父目錄,以便它可以找到您的python_server_copy package。

你有幾個選擇:

import sys
sys.path.insert(0, <Path to root>)

或者直接導入utils程序,因為它已經可以找到了:

from utils import get_project_root

或者最后,由於您只是在測試,請使用PYTHONPATH環境變量運行腳本:

PYTHONPATH="abs-path-to-root" python copy.py 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM