Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否可以永久添加python站点目录?_Python - Fatal编程技术网

是否可以永久添加python站点目录?

是否可以永久添加python站点目录?,python,Python,为了管理我的项目的所有python路径,并在启动python解释器时使它们可用,我在项目主目录中创建了一个project.pth,其中包含相对路径, 实际上,为了便于阅读,每次启动解释器时,我都需要执行site.addsitedirmy\u project\u home\u dir 我尝试在指向我的项目主目录的站点包中设置PYTHONPATH或创建.pth,但启动解释器时仍然无法自动读取project.pth 唯一有效的方法是将我的project.pth放在站点包中,但通过这样做,我必须将我的项

为了管理我的项目的所有python路径,并在启动python解释器时使它们可用,我在项目主目录中创建了一个project.pth,其中包含相对路径, 实际上,为了便于阅读,每次启动解释器时,我都需要执行site.addsitedirmy\u project\u home\u dir

我尝试在指向我的项目主目录的站点包中设置PYTHONPATH或创建.pth,但启动解释器时仍然无法自动读取project.pth

唯一有效的方法是将我的project.pth放在站点包中,但通过这样做,我必须将我的项目相对路径转换为绝对路径


因此,是否有一个master.pth文件,我可以在其中指定我的项目主目录,以便自动读取该目录中的project.pth?

虽然我知道这并没有明确回答您的问题,但我可以建议另一种方法吗?虚拟环境的使用

给定一个我使用pyscaffold创建的项目。 -在最高级别的python-MVenv上创建一个虚拟环境。 -将PYTHONPATH添加到venv\Scripts\activate.bat文件中。 -PYTHONPATH应至少包含三个条目path\to\MyTestProject;pat\to\MyTestProject\src;路径\到\MyTestProject\tests。通过venv\Scripts\Activate.bat从cmd激活您的虚拟环境。-从模块内部,从src导入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首先,请注意.pth文件也接受以“import”开头的行并执行它们。因此,解决方案是在站点包内创建project.pth,并在my project home dir中导入一个模块,该模块实际上执行site.addsitedir


2其他可能性:使用环境变量PYTHONSTARTUP:它将在python启动时执行您想要的任何模块。您可以指定一个模块来执行site.addsitedir操作,甚至可以直接将路径添加到sys.path

中。根据,在Windows上向本地lib/site packages目录添加.pth文件应该可以工作。您是注销Windows还是重新启动PC以更新路径文件?如果您不这样做,Windows将不会更新您的路径。我正在使用Linux,我不想为此重新启动电脑。我希望.pth位于我的项目目录中,而不是站点包目录中,这样我可以使用相对路径。是的,这是一个好主意。尽管如此,由于我想自动安装该项目,因此自动编辑一个激活文件是危险的,该文件可能会随着virtualenv evolution而更改。另外,有一个针对windows的activate.bat和一个针对linux的activate,对于一个通用解决方案来说,两者都很难维护。啊……考虑到你的声誉,我想我应该假设你了解虚拟环境。这个问题并不清楚你是在进行自动安装,所以我只是假设:无论如何,祝你好运。不过,我很好奇,为什么你认为修改激活会很复杂或危险?用几行代码修改activate似乎很容易,只要附加PYTHONPATH而不是覆盖PYTHONPATH,就相当安全。有什么我遗漏的吗?手动修改很容易。但是,通过安装后脚本,如果同时由于virtualenv的更改而更改了激活脚本,则可能会遇到一些问题。我喜欢有路径列表的平面文件。