【问题标题】:How to append multiple Paths to PYTHONPATH programmatically如何以编程方式将多个路径附加到 PYTHONPATH
【发布时间】:2012-05-23 08:56:27
【问题描述】:

我有 4 个目录:

/home/user/test1
/home/user/test2
/home/user/test3
/home/user/test4

我有另一个包含测试的目录

/home/user/testing

拥有文件 testall.py

哦,我如何将 test1 到 test4 的 PATHS 附加到 PYTHONPATH,以便我可以访问 test1 到 4 下的文件。

顺便说一句,test1 到 4 在它们下面有多个目录,这些目录是 python 文件所在的位置。

我试过了:

import sys
import os
PROJECT_ROOT = os.path.dirname(__file__)
sys.path.insert(0,os.path.join(PROJECT_ROOT,"test1"))
sys.path.insert(1,os.path.join(PROJECT_ROOT,"test2"))
sys.path.insert(2,os.path.join(PROJECT_ROOT,"test3"))
sys.path.insert(3,os.path.join(PROJECT_ROOT,"test4"))

好像没用

还有:

import sys
sys.path.append('/home/user/test1','/home/user/test2','/home/user/test3','/home/kahmed/test4')
from test1.common.api import GenericAPI

没用。

基本上: 从 test1.common.api 导入 GenericAPI 应该工作

【问题讨论】:

  • 您想在 python 脚本中执行此操作吗? (sys.path.append(path)),来自你的 bash shell? export PYTHONPATH=${PYTHONPATH}:path1:path2:path3:path4,来自 csh 之类的 shell? setenv PYTHONPATH ${PYTHONPATH}:path1:path2:path3:path4
  • 我也尝试使用 bash 并将这一行附加到 /etc/profile export PATHONPATH=${PYTHONPATH}:/home/user/test1:/home/user/test2:/home/user/test3 :/home/user/test4 但是当我回显 $PYTHONPATH 时,我什么也得不到
  • 为什么-2,即使我尝试了很多解决方案?
  • 目录中是否有__init__.py 文件(这使得目录成为模块)?如果没有,请放入一个然后尝试sys.path.append('/home/user'); from test1.common.api import ...
  • 更改您的 /etc/profile 您是否注销并再次登录?系统配置文件仅在登录时重新读取。或者,直接在您当前的 shell 中执行该命令...

标签: python path pythonpath


【解决方案1】:

sys.path.append('/home/user/test1','/home/user/test2', ...) 不起作用,因为append() 函数只能接受 1 个参数。

你可以改用的是:

import sys
sys.path += ['/home/user/test1','/home/user/test2','/home/user/test3','/home/kahmed/test4']

【讨论】:

  • 不适用于 python3.7.4。我仍然需要对单个项目执行 sys.path.append() 以使 python 识别这些路径。
  • @user3342981 刚刚在 3.7.5 上测试过,它可以工作。检查 sys.path 列表的最后一个元素,添加的路径将在那里。 += 运算符等效于 .extend(),其工作方式与 .append() 完全相同,但接受多个参数。
  • 解决方案仅适用于多条路径。对于单个路径,它奇怪地将每个字符添加到路径中。试试sys.path += ('/home/user/test1'); print(sys.path)。附言我知道问题是关于多条路径的。
  • @user3342981 对单个路径执行 sys.path += ['/home/user/test1']
【解决方案2】:

试试这个:

import sys
sys.path.append('/home/user/')
from test1.common.api import GenericAPI

不推荐,但也许会做你想做的事?因为我猜你的文件不在文件夹/home/user/test1/test1/common/api/...

给定一个["a", "b", "c"] 的python 路径,尝试import a.b.c 将查找a/a/b/c,然后是b/a/b/cc/a/b/c。但是,NOTa/b/c 中。模块名称 startinga 不匹配,python 路径 endinga 不匹配,然后省略了 as 之一。严格来说是路径+模块,而不是路径的一部分+模块的一部分。

由于您的问题是关于“多条路径”的,单条 路径对您有用吗?好像不是……

【讨论】:

  • 这行得通,但我仍然会寻找一个通用的解决方案,目录不必硬编码,并使用相对路径。不,它不适用于单一路径。
【解决方案3】:

更多这样的:

sys.path.append \
("C:\\Program Files\\DIgSILENT\\...");("C:\\Programs\\eclipse...")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-19
    • 2016-07-22
    • 2013-08-30
    • 1970-01-01
    • 1970-01-01
    • 2021-11-17
    • 1970-01-01
    相关资源
    最近更新 更多