首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在VirtualEnv中用.pth编程追加PYTHONPATH

在VirtualEnv中用.pth编程追加PYTHONPATH
EN

Stack Overflow用户
提问于 2017-10-30 16:47:11
回答 1查看 992关注 0票数 3

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

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

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

代码语言:javascript
复制
MyProjectRoot
+ setup.py
+ data 
+ source
    + foo
        + lib
            + qux
                + A.py
    + bar
        + assets
            + B.py
    + baz
        + C.py

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

代码语言:javascript
复制
import source.foo.lib.qux.A
import source.bar.assets.B

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

代码语言:javascript
复制
basePath = os.path.abspath("../..")
sys.path.append(basePath)
EN

回答 1

Stack Overflow用户

发布于 2017-10-30 23:09:40

您需要通过在每个目录中添加foolibquxbarbaz,将source目录放置在sys.path上(例如,在运行脚本之前将目录添加到PYTHONPATH中),并使用相对的导入语法,如from .foo.lib.qux.A import ...

更新

通常,您需要从项目中生成一个适当的Python包。这是通过根据setup.cfgsetup.py文件编写规则来完成的。然后,您需要安装您的软件包。在安装期间,会采取特定的操作,以确保项目的目录和文件(或者更确切地说是包和模块)是可导入的。安装package最常见的方法是在包的根目录中运行pip install <package-name>pip install --editable .

前者将包中的目录和文件复制到特定于Python解释器的site-packages目录中。在sys.path的启动包和模块放置期间,该目录被放置在Python上,因此任何Python代码都可以自动导入该目录。

后者用于正在开发中的包,该包将导致在前面提到的.pth目录中创建site-packages文件。文件的内容是包的根目录的路径。所有.pth文件都是在sys.path启动和路径添加到sys.path列表时读取的。

如果您想在不安装项目/包的情况下使包和模块变得重要,那么您可以自己扩展sys.path

您可以使用指向项目根目录的路径创建.pth文件,并将其放入适当的site-packages目录中。要了解您正在使用的Python实例的site-packages目录在哪里,请参阅如何找到我的Python站点-包目录的位置?

也可以在运行python-PYTHONPATH=/path/to/the/project/root/dir /path/to/python script-from-project.py之前设置环境变量PYTHONPATH

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47020343

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档