gpt4 book ai didi

python - 使用 .pth 以编程方式附加到 VirtualEnv 中的 PYTHONPATH

转载 作者:行者123 更新时间:2023-11-28 18:18:17 25 4
gpt4 key购买 nike

如何使用 Python 脚本以编程方式将当前路径附加到当前 Virtualenv 的 PYTHONPATH,使用 .pth 或其他方法?

这需要同时适用于 Windows 和 Linux。

我正在尝试在项目根路径中添加一个 Python 脚本 setup.py,该脚本在执行时会将项目根路径添加到 PYTHONPATH,以便嵌套目录中的其他脚本可以通过相对导入来导入模块从项目根目录。

MyProjectRoot
+ setup.py
+ data
+ source
+ foo
+ lib
+ qux
+ A.py
+ bar
+ assets
+ B.py
+ baz
+ C.py

例如,在C.py中,我们可以使用

import source.foo.lib.qux.A
import source.bar.assets.B

为了避免必须将以下内容的变体添加到每个希望使用相对于项目根目录的导入的文件中:

basePath = os.path.abspath("../..")
sys.path.append(basePath)

最佳答案

你需要制作foo , lib , qux , barbaz通过添加 __init__.py 到包中在这些目录中的每个目录中放置 source sys.path 上的目录(例如,通过在运行脚本之前将目录添加到 PYTHONPATH)并使用类似 from .foo.lib.qux.A import ... 的相对导入语法

更新

通常,您应该从您的项目中创建一个合适的 Python 包。这是通过写 setup.cfg 来完成的。或 setup.py根据 rules 归档.然后你应该安装你的包。 在安装过程中会采取特定的操作来确保项目的目录和文件(或者更确切地说是包和模块)是可导入的。安装 Python 包的最常见方法是运行 pip install <package-name>pip install --editable .在包的根目录中。
前者将包内的目录和文件复制到site-packages特定于 Python 解释器的目录。因为这个目录放在sys.path在 Python 的启动过程中,放置在那里的包和模块可由任何 Python 代码自动导入。
后者用于正在开发的包,并导致创建 .pth已经提到的文件 site-packages目录。文件的内容是包根目录的路径。全部.pth在 Python 启动期间读取文件并将路径添加到 sys.path列表。

如果您想在不安装项目/包的情况下使包和模块可导入,那么您可以扩展 sys.path你自己。
您可以创建 .pth包含项目根目录路径的文件,并将其放在适当的 site-packages 中目录自己。找出site-packages在哪里您正在使用的 Python 实例的目录请参阅 How do I find the location of my Python site-packages directory?
或者你可以设置环境变量 PYTHONPATH在运行 Python 之前 – PYTHONPATH=/path/to/the/project/root/dir /path/to/python script-from-project.py

关于python - 使用 .pth 以编程方式附加到 VirtualEnv 中的 PYTHONPATH,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47020343/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com