Src 布局在导入时分配 .src 前缀?在 PyCharm 终端中激活 venv 以进行开发安装

2025-03-26 09:08:00
admin
原创
24
摘要:问题描述:我想了解什么才是正确的简约方式,即使用带有“src/layout”的setuptools ,以便src.在导入时无需使用前缀?我已经阅读了大部分PyPA和setuptools文档(及其许多用例),但我不明白什么才被认为是完成此示例的正确方法。下面的布局重现了我想要实现的目标。我不明白如何让第二个导入...

问题描述:

我想了解什么才是正确的简约方式,即使用带有“src/layout”的setuptools ,以便src.在导入时无需使用前缀?

我已经阅读了大部分PyPA和setuptools文档(及其许多用例),但我不明白什么才被认为是完成此示例的正确方法。

下面的布局重现了我想要实现的目标。我不明白如何让第二个导入而不是第一个导入在包的所有模块中起作用mylibrary

from src.mylibrary.hello_word import hello_function # <- This works.
from mylibrary.hello_word import hello_function  # <- How to get this working?

hello_function()

使用此目录/文件结构:

C:MyProject
│
│   setup.py
│
└───src
    │
    ├──mylibrary
    │      hello_word.py
    │      module_two.py
    │      __init__.py
    │

当我使用开发模式安装时,pip install -e .egg 目录被添加到上面的树中:

    │ (...)
    │ 
    └──mylibrary.egg-info
           dependency_links.txt
           PKG-INFO
           SOURCES.txt
           top_level.txt

有了这个setup.py

from setuptools import setup, find_packages, find_namespace_packages

setup(
    name='mylibrary',
    version='0.1',
    package_dir={'': 'src'},
    # packages=find_namespace_packages(where='src'),  # <- I suppose this isn't the deciding factor.
    packages=find_packages(where='src'),
)

我想省去导入时hello_world.py必须编写的简单模块。src.

def hello_function():
    print("hello world")

留空__init__.py

我正在使用 venv,令我惊讶的是,egg 符号链接并未写入 venv,sitepackages而是写入C:UsersNameAppDataRoamingPythonPython38site-packages......

Python 控制台指示mylibrary找到了包:

>>> from setuptools import find_packages
>>> find_packages(where='src')
['mylibrary']

解决方案 1:

更新/解决方法

您可以按照此链接中的步骤将文件夹标记为source root。来自链接:

源根源根图标包含实际的源文件和资源。PyCharm 使用源根作为解析导入的起点

这样我们就不必再安装它或者改变路径了(虽然对我来说这仍然感觉有点棘手)

1.Pycharm出现pip问题:

每当我pip在 pycharm 终端中运行时,它都会出于某种原因运行系统pip。您可以使用命令检查which pip。但如果我运行python -m pip它,它会做正确的事情。

2.它实际上应该识别导入:

话虽如此,我真的不知道为什么 pycharm 无法识别没有src.前缀的导入。我从 github 克隆了 `cryptography 包,它可以正常识别它,src 文件夹会自动添加到路径中,但我不知道怎么做。

无论哪种方式,您的代码都可以按预期工作,无需前缀,并且 Vim(使用 Pyright)可以完美识别它。即使在 pycharm 上运行它,实际上也可以处理所有导入错误。

3. 现在该怎么办?

直到他们修复它或者我找到解决方案,我才会手动将 src 文件夹添加到解释器设置中的路径中,因为我不想安装它(但我希望能够达到峰值并转到定义)。

如果我真的想安装该包,我会在终端或 pycharm 中使用python -m pip install -e -v .

解决方案 2:

所述问题是由于必须在 PyCharm 终端内激活 venv而导致的。

以下是您可能遇到的情况的描述。(问题并不是立即显现出来的,因为与终端不同,调试、运行等功能以无缝方式集成了 venv。)

需要注意的是:

  • 在开发模式-v下安装时使用详细标志可以提供有关pipsetuptools正在尝试执行的操作的线索。

  • 决定性的pip消息基于您的写权限site-packages,但是如果在终端上激活您的 venv,您将不必更改任何默认权限。

  • 如果您使用 1 venv,则将会site-packages涉及 3 种不同的路径(注意路径)。

您可能会尝试以下 3 个选项:

选项 1.以管理员身份运行PyCharm,从终端执行以下操作:

C:MyProject>pip install -v -e .

Non-user install because site-packages writeable
(...)
Creating c:program filespython38libsite-packagesmylibrary.egg-link (link to src)

这会安装到site-packages(注意路径)您的基本 Python 安装中。您可能想避免这种情况,因为它会污染您的基本安装。

选项 2.以用户身份运行PyCharm无需在终端上激活 venv。

C:MyProject>pip install -v -e .

Defaulting to user installation because normal site-packages is not writeable
(...)
Creating c:/users
ameappdata
oamingpythonpython38site-packagesmylibrary.egg-link (link to src)

这会安装到site-packages(注意路径)venv 之外,以及 Python 基础安装之外。您可能想避免这种情况,因为完成后PyCharm将无法识别开发安装。

注意:终端中的消息“(...) site-packages 不可写”指的是site-packagesPython 基础安装中的。但是,如果不明确激活 venv,即使您将权限设置为可写,开发安装也不会写入您的 venv site-packages

选项 3.以用户身份运行PyCharm在终端上激活 venv。

(MyProject_venv) C:MyProject>pip install -v -e .

Non-user install because user site-packages disabled
(...)
Creating c:myproject_venvlibsite-packagesmylibrary.egg-link (link to src)

在这里您确实site-packages在 venv 中写入了内容,这可能就是您想要的。

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   2482  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1533  
  PLM(产品生命周期管理)项目对于企业优化产品研发流程、提升产品质量以及增强市场竞争力具有至关重要的意义。然而,在项目推进过程中,范围蔓延是一个常见且棘手的问题,它可能导致项目进度延迟、成本超支以及质量下降等一系列不良后果。因此,有效避免PLM项目范围蔓延成为项目成功的关键因素之一。以下将详细阐述三大管控策略,助力企业...
plm系统   0  
  PLM(产品生命周期管理)项目管理在企业产品研发与管理过程中扮演着至关重要的角色。随着市场竞争的加剧和产品复杂度的提升,PLM项目面临着诸多风险。准确量化风险优先级并采取有效措施应对,是确保项目成功的关键。五维评估矩阵作为一种有效的风险评估工具,能帮助项目管理者全面、系统地评估风险,为决策提供有力支持。五维评估矩阵概述...
免费plm软件   0  
  引言PLM(产品生命周期管理)开发流程对于企业产品的全生命周期管控至关重要。它涵盖了从产品概念设计到退役的各个阶段,直接影响着产品质量、开发周期以及企业的市场竞争力。在当今快速发展的科技环境下,客户对产品质量的要求日益提高,市场竞争也愈发激烈,这就使得优化PLM开发流程成为企业的必然选择。缺陷管理工具和六西格玛方法作为...
plm产品全生命周期管理   0  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用