簡體   English   中英

嘗試從另一個存儲庫(在 VSCode 內)導入 Python 模塊

[英]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.

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