首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PYTHONPATH与sys.path

PYTHONPATH与sys.path
EN

Stack Overflow用户
提问于 2009-12-12 22:33:37
回答 6查看 113.3K关注 0票数 100

另一位开发人员和我在是否应该使用PYTHONPATHsys.path来允许Python在用户(例如开发)目录中找到Python包的问题上意见不一。

我们有一个具有典型目录结构的Python项目:

代码语言:javascript
复制
Project
    setup.py
    package
        __init__.py
        lib.py
        script.py

在script.py中,我们需要执行import package.lib。当包安装在site-packages中时,script.py可以找到package.lib

然而,当从用户目录工作时,需要做一些其他的事情。我的解决方案是将PYTHONPATH设置为包含"~/Project"。另一位开发人员想要将这行代码放在script.py的开头:

代码语言:javascript
复制
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

这样Python就可以找到package.lib的本地副本。

我认为这是一个坏主意,因为这一行只对开发人员或从本地副本运行的人有用,但我不能给出一个好的理由为什么它是一个坏主意。

我们应该使用PYTOHNPATHsys.path,还是两者都可以?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-12-12 22:39:07

如果修改路径的唯一原因是开发人员在他们的工作树中工作,那么您应该使用安装工具来为您设置环境。virtualenv非常流行,如果您正在使用setuptools,您可以简单地运行setup.py develop在当前的Python安装中半安装工作树。

票数 42
EN

Stack Overflow用户

发布于 2009-12-12 22:54:30

我讨厌PYTHONPATH。我发现在每个用户的基础上设置(特别是对守护程序用户)和跟踪项目文件夹的移动是很脆弱和恼人的。我更愿意在独立项目的调用脚本中设置sys.path

然而,sys.path.append不是解决这个问题的方法。你可以很容易地得到副本,而且它不会整理.pth文件。更好(也更具可读性):site.addsitedir

而且script.py通常不是更合适的地方,因为它在您想要在路径上提供的包中。库模块当然不应该接触到sys.path本身。相反,你通常会在包之外有一个散列脚本,用来实例化和运行应用程序,在这个简单的包装器脚本中,你会放入像sys.path-frobbing这样的部署细节。

票数 39
EN

Stack Overflow用户

发布于 2009-12-13 01:06:50

一般来说,我认为设置环境变量(如PYTHONPATH)是一种糟糕的做法。虽然这对于一次性调试来说可能很好,但是使用如下代码

常规的实践可能不是一个好主意。

使用环境变量会导致像"it works for me“这样的情况,当有人

else报告代码库中的问题。此外,测试环境也可能会有相同的做法,导致测试对于特定的开发人员运行良好,但当某人启动测试时可能会失败。

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1893598

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档