如何使用Python脚本使用.pth或其他方法以编程方式将当前路径附加到当前Virtualenv的PYTHONPATH?
这需要同时适用于Windows和Linux。
我正在尝试在项目根路径中使用PYTHONPATH 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)发布于 2017-10-30 23:09:40
您需要通过在每个目录中添加foo、lib、qux、bar和baz,将source目录放置在sys.path上(例如,在运行脚本之前将目录添加到PYTHONPATH中),并使用相对的导入语法,如from .foo.lib.qux.A import ...
更新
通常,您需要从项目中生成一个适当的Python包。这是通过根据setup.cfg或setup.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。
https://stackoverflow.com/questions/47020343
复制相似问题