我的库在 venv 中找不到子依赖项

My library cannot find the subdependency inside the venv

我不明白我的 Python 脚本和库是如何使用 venv 的。我用 python -m venv .venv 创建库,然后 poetry add 所有内容,最后 poetry publish。因此该库包含它自己的 .venv。另一方面,对于我的脚本,我执行 python -m venv .venv ,然后 pip install <library> 进入脚本自己的 .venv。我不认为这种 poetrypip 的差异会导致我的问题,但我强调它是为了上下文。

所以我运行脚本用.venv\Scripts\python.exe my_script.py。 Afaik,这就是 运行 我的脚本在其 venv 中所需的全部,即。我实际上不需要 运行 .venv/Scripts/activate 或其他任何东西。这似乎工作正常,因为我可以看到我的脚本正在使用安装在其 venv 中的库。 但是,库本身并未使用 venv 的 python.exe 或其库。

由于今天发生的异常情况,我现在才注意到这一点。请忽略 PermissionError 本身,它实际上是预期的,因为今天目标文件当时已打开。但是,它揭示了我认为是我的设置问题还是我的误解:

2022-03-07 09:13:36,364 ERROR   [Errno 13] Permission denied: '\\path\to\file\I\wanted\to\overwrite.pdf'     (files.py:36)
Traceback (most recent call last):
  File "c:\Users\<user>\<project folder>\.venv\lib\site-packages\<library>\file_system\files.py", line 33, in copy_file
    shutil.copyfile(source, destination)
  File "C:\Users\<user>\AppData\Local\Programs\Python\Python39\lib\shutil.py", line 266, in copyfile
    with open(dst, 'wb') as fdst:
PermissionError: [Errno 13] Permission denied: '\\path\to\file\I\wanted\to\overwrite.pdf'

如您所见,我的脚本正确地求助于 .venv 中的库(事实上这个库从未在系统范围内安装过,所以它真的别无选择)。我的图书馆使用 shutil 来复制文件。但是,它并没有求助于脚本 .venv 内的 shutil,而是系统范围的 Python 安装,如下所示:

File "C:\Users\<user>\AppData\Local\Programs\Python\Python39\lib\shutil.py", line 266, in copyfile

我支持ose 因为 shutil 是 Python 标准库的一部分,它在找到 venv 中的 shutil 之前找到了通用库?有没有办法告诉我的 script/library 在 .venv 中使用 shutil.venv里面还有一个shutil吗??当我浏览 .venv\Lib\site-packages 时,我在那里没有看到任何 shutil,但是我也没有看到任何 Python 的标准模块(例如 os ,日志记录等)所以我并不感到惊讶。但是我如何强制我的脚本在其 .venv 中使用 shutil 而不是系统 Python 中的 shutil?是重新排序还是从 PATH 中删除系统 Python?

谢谢

这对我来说似乎是正常行为。虚拟环境中不复制标准库。虚拟环境中的python.exe需要并使用用于创建虚拟环境的Python解释器的标准库。

Each virtual environment has its own Python binary (allowing creation of environments with various Python versions) and can have its own independent set of installed Python packages in its site directories, but shares the standard library with the base installed Python.

-- "Abstract" section of PEP 405

另请参阅: