gpt4 book ai didi

python - 以编程方式确定 Bin 路径

转载 作者:太空宇宙 更新时间:2023-11-04 10:32:38 25 4
gpt4 key购买 nike

我正在开发一个名为 pj 的网络应用程序,其中有一个 bin 文件和一个 src 文件夹。

部署应用程序之前的相对路径类似于:

pj/binpj/src/pj/script.py

但是,部署后,相对路径将如下所示:

pj_dep/deployed/binpj_dep/deployed/lib/python2.6/site-packages/pj/script.py

问题:

script.py 中,我试图找到 bin 目录中文件的路径。这会在开发和部署环境中导致两种不同的行为。

如果我这样做

os.path.join(os.path.dirname(__file__), 'bin')

为了尝试获取开发环境的路径,我将有一个不同的部署环境路径。

有没有更通用的方法可以找到 bin 目录,这样我就不需要依赖 if 语句来确定根据当前环境要上升多少个目录?这看起来不灵活,并且可能会在稍后移动代码时导致其他问题。

编辑:我的猜测是我可以使用 setup.py 执行此操作,但我对该文件不够熟悉,无法确定要查看的位置。

最佳答案

通常,这些目录不是动态找到的,而是之前配置的。

如果您的应用程序只是一个实用程序,您可以有两个配置文件(可能是 jsonyaml,甚至是 py 文件)。在开发期间使用其中一个文件,并将另一个文件与最终构建捆绑在一起。它们看起来像这样:

# config.json
{
'path_script': 'foo/pj/lib/script.py'
'path_bin': 'foo/pj/bin'
}

您的程序总是在同一个地方查找 config.json:您在构建用于分发的应用程序时切换文件。

如果您的应用程序是服务器,最干净的方法是在可获取源的 shell 文件中使用环境变量。这适用于 virtualenv。例如,您可以在项目根目录中包含此 env 文件:

source virtualenv/bin/activate

# In the production environment, before sourcing this script, declare `APP_ENV`

if [[ $APP_ENV = "PRODUCTION" ]]; then
export PATH_SCRIPT="foo/pj/lib/script.py"
export PATH_BIN="foo/pj/bin"

else
export PATH_SCRIPT="foo/bar/pj/lib/script.py"
export PATH_BIN="bar/baz/pj/bin"
fi

当您打开 shell 进行开发时,source env 而不是您的 virtualenv。在生产环境中运行应用程序时,export APP_ENV="PRODUCTION" 采购前。您可以在 upstartsupervisorsystemd 中设置环境变量,无论您使用什么软件来运行服务器。

请注意,此方法可扩展到您可能需要的任何其他配置,因为其中大部分在开发和生产之间有所不同:SQL 地址和登录名、API key 等。

关于python - 以编程方式确定 Bin 路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25451409/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com