为了管理我项目的所有python路径,并在我启动python解释器后立即使用它们,我在项目主目录中创建了一个project.pth,其中包含相对路径, 实际上,要阅读,我每次启动解释器时都需要执行site.addsitedir(my_project_home_dir)。
我尝试设置PYTHONPATH或在指向我的项目主目录的site-packages中创建.pth,但是当我启动解释器时,project.pth仍然没有自动读取。
唯一有效的方法是将我的project.pth放在site-packages中,但是通过这样做,我必须将我的项目相对路径转换为绝对路径。
所以它有一个主.pth文件,我可以指定我的项目主目录,这样我就可以让我的project.pth位于该目录中自动读取?
答案 0 :(得分:1)
虽然我知道这并没有具体回答你的问题,但我可以建议采用不同的方法吗?使用虚拟环境(venv)。
给定一个项目(我用pyscaffold)来创建。 - 在最高级别创建虚拟环境(python -m venv venv)。 - 将PYTHONPATH添加到您的venv \ Scripts \ activate.bat文件中。 - PYTHONPATH应包含至少三个条目(path \ to \ MyTestProject; pat \ to \ MyTestProject \ src; path \ to \ MyTestProject \ tests)。通过" venv \ Scripts \ activate.bat"从cmd激活您的虚拟环境。 - 从模块中导入,从src导入(import src.mytestproject.package1.module1)
每次激活虚拟环境时,您都可以使用自己的路径 - 并且,您将获得与虚拟环境相关的所有优点作为奖励。
MyTestProject
├── AUTHORS.rst
├── CHANGELOG.rst
├── docs
│ ├── authors.rst
│ ├── changelog.rst
│ ├── conf.py
│ ├── index.rst
│ ├── license.rst
│ ├── Makefile
│ └── _static
├── LICENSE.txt
├── README.rst
├── requirements.txt
├── setup.cfg
├── setup.py
├── src
│ └── mytestproject
│ ├── __init__.py
│ ├── package1
│ │ ├── __init__.py
│ │ └── module1.py
│ ├── package2
│ │ ├── __init__.py
│ │ └── module2.py
│ └── skeleton.py
└── tests
├── conftest.py
└── test_skeleton.py
答案 1 :(得分:0)
最后我发现了两种方式:
1)首先,请注意.pth文件也接受以' import'开头的行。并执行它们。所以解决方案是在site-packages中创建project.pth导入我的项目主目录中的模块,该模块实际上是site.addsitedir()
2)其他可能性:使用环境变量PYTHONSTARTUP:它将在python启动时执行你想要的任何模块。您可以指定执行site.addsitedir()的模块,甚至可以直接将路径添加到sys.path
中