[英]Trying to import a Python module from another repo (within VSCode)
目前有兩個存儲庫克隆到 VSCode。 當我打開 VSCode 時,我的目錄結構如下所示:
- Repo1
- Base 1
- Scripts
-Code.py
- Repo2
- testcode.py
我試圖執行的這個 python 文件具有以下導入語句:
from repo2.testcode import testmodule
但是,python 並未將其識別為模塊……並且返回以下錯誤消息:
ModuleNotFoundError: No Module named 'Repo2'.
我做了一些研究並意識到我需要做任何一個:我需要制作一個包裹嗎? 或者我需要添加到模塊路徑導入語句中嗎?
提前致謝。
您的模塊名稱是Repo2
而不是repo2
並且在您的目錄結構中有一個文件testmodule
而不是testcode
所以嘗試設置from Repo2.testcode import ...
在導入語句之前使用以下代碼
import os,sys,inspect
current_dir = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))
parent_dir = os.path.dirname(current_dir)
sys.path.insert(0, parent_dir)
它將帶您到父目錄並從那里導入模塊
問題:
ModuleNotFoundError: No Module named
這意味着 python 解釋器在PYTHONPATH下找不到此包或包已損壞。
您可以通過以下代碼獲取PYTHONPATH
:
import sys
from pprint import pprint
pprint(sys.path)
您可以檢查是否可以找到 Repo2 文件夾的父文件夾。
解決方案:
VSCode 提供了修改 PYTHONPATH 的方法,但只能在調試模式下工作:
"env": {"PYTHONPATH":"${workspaceFolder}"}, //${workspaceFolder} means the path of the folder opened in VS Code. Modify it to the path of the parent folder of Repo2.
或者在python文件中手動修改路徑:
sys.path.append("parent folder path of the Repo2 folder")
它應該放在 import 語句之前。
如果您決定使用包,您可以在 setup.py 中指定另一個本地包的路徑。
您的整體結構將是:
|-- Repo1/
| |-- setup.py
| |-- Repo1/
│ | |-- __init__.py
| | |--Code.py
| |-- tests/
| | |--test_Code.py
|
|-- Repo2/
| |-- setup.py
| |-- Repo2/
│ | |-- __init__.py
| | |--testcode.py
Repo1/setup.py。
from setuptools import setup, find_packages
import os
# dynamically determine the path to Repo2
local_name = "Repo2"
local_path = os.getcwd().split(os.sep)
local_path = os.sep.join(local_path[0:local_path.index(local_name)])
local_path = os.path.join(local_path, local_name)
setup(
name="Repo1",
version="1.0.0",
description="First Repo",
python_requires=">=3.5.0",
packages = find_packages(),
install_requires=[
'SomePyPIPackage',
f"{local_name} @ file://localhost/{local_path}#egg={local_name}"
]
)
Repo2 中的 setup.py 文件類似,但沒有 install_requires localhost 部分。
然后,當您在 Repo1 的頂級目錄中時,您可以運行(不要忘記末尾的點):
# would have to reinstall if you make changes to Repo2
pip install .
# or install in editable mode
pip install -e .
然后在 Repo1 中,您應該可以使用:
from repo2.testcode import testmodule
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.