当前位置: 首页 > 面试题库 >

使用.pth文件

凤修为
2023-03-14
问题内容

我试图在不具有对全局site- packages目录的写访问权且不更改环境(PYTHONPATH)的系统上使模块可发现。我试图将.pth文件与正在执行的脚本放在同一目录中,但似乎被忽略了。例如,我创建了一个extras.pth包含以下内容的文件:

N:\PythonExtras\lib\site-packages

但是以下脚本(放置并在同一目录中运行)打印False

import sys
print r"N:\PythonExtras\lib\site-packages" in sys.paths

sys.path我具有写访问权的唯一目录是包含脚本的目录。我可以放置另一个目录(当前不存在)extras.pth并看到它吗?有没有更好的方法来解决这个问题?

我在Windows上使用python 2.7。.pth我在这里可以找到的所有问题都使用系统模块目录。

编辑: 我已经找到了Windows每用户安装目录,位于%APPDATA%\Python\Python27\site- packages。我可以在其中放置一个模块,它将被导入,但是如果我在其中放置.pth文件,则它没有任何作用。这真的不应该工作吗,还是我做错了什么?


问题答案:

如文档中所述,仅在site-
packages目录中处理PTH文件。(更确切地说,如果它们位于“站点目录”中,则将对其进行处理,但是“站点目录”本身是Python安装的全局设置,并且不依赖于当前目录或脚本所在的目录。)

如果包含脚本的目录位于上sys.path,则可以sitecustomize.py在该目录中创建一个。将在Python启动时加载。在内部sitecustomize.py,您可以执行以下操作:

import site
site.addsitedir('/some/dir/you/want/on/the/path')

这不仅会添加该目录,还会将其添加为“站点目录”,从而导致在那里处理PTH文件。如果要创建自己的个人“site-packages喜欢”目录,这非常方便。

如果只需要在路径中添加一个或两个目录,则可以更简单地进行操作。只需创建一个可操作的微型Python库,sys.path然后从脚本中导入该库即可。就像是:

# makepath.py
import sys
sys.path.append('/whatever/dir/you/want')

# script.py
import makepath

编辑:再次,根据文档,%APPDATA%\Python\PythonXY\site- packages(在Windows上)存在站点特定目录的可能性。如果实际上您对此具有写权限(而不仅是对脚本目录的写权限),可以尝试一下。



 类似资料:
  • 问题内容: 从Java序列化为JSON时,当使用带有延迟加载和Jackson的多态类型处理的Spring Data MongoDB 批注时,Jackson会为引用的实体生成一个额外的属性。为什么会发生这种情况,并且可以省略多余的属性? 代码示例 生成的JSON 问题答案: “目标”字段由Spring Data添加,因为它是一个惰性集合。因此就像Hibernate for JPA中的datahand

  • 在 Swarm 集群中使用 compose 文件 正如之前使用 docker-compose.yml 来一次配置、启动多个容器,在 Swarm 集群中也可以使用 compose 文件 (docker-compose.yml) 来配置、启动多个服务。 上一节中,我们使用 docker service create 一次只能部署一个服务,使用 docker-compose.yml 我们可以一次启动多个

  • 1.1 文件概述 Python 能够以文本和二进制两种方式处理文件。文本文件一般由单一特定编码的字符组成,例如 UTF-8 编码,内容容易统一展示和阅读。二进制文件直接由比特0和1组成,没有统一字符编码。二进制文件和文本文件最主要的区别在于是否有统一的字符编码。二进制文件由于没有统一字符编码,只能当做字节流,而不能看作是字符串。 1.2 文件的打开和关闭 Python 通过解释器内置的 open(

  • 问题内容: 我正在使用以下方法比较junit中的文本文件: 这是比较文本文件的好方法吗?什么是首选? 问题答案: junit-addons对它有很好的支持:FileAssert 它为您提供了如下异常:

  • 问题内容: 我如何阅读像android app中的文本文件: 所以我可以返回一个字符串,如: 我想到的是(伪代码): 问题答案: 试试这个

  • 问题内容: 我在使用BufferedReader时遇到问题 我想打印一个文本文件的6行: 现在,从每次调用readLine()方法可以收集到的信息开始,它都会自动前进到下一行。 所以我不能使用条件br.readLine()!= null,因为它已经将其前进了一行,并且我得到了输出: 我使用什么条件来检查文本字段中是否还有新行。 提前致谢! 问题答案: 这就是问题: 您有两次调用-第一个 仅 检查是