Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.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/2/cmake/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 以编程方式确定Bin路径_Python - Fatal编程技术网

Python 以编程方式确定Bin路径

Python 以编程方式确定Bin路径,python,Python,我正在开发一个名为pj的web应用程序,其中有一个bin文件和一个src文件夹 部署应用程序之前的相对路径如下所示: pj/bin和pj/src/pj/script.py 但是,部署后,相对路径如下所示: pj_dep/deployed/bin和pj_dep/deployed/lib/python2.6/site-packages/pj/script.py 问题: 在script.py中,我试图在bin目录中查找文件的路径。这导致在开发和部署环境中出现两种不同的行为 如果我这样做 os.path

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

部署应用程序之前的相对路径如下所示:

pj/bin和pj/src/pj/script.py

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

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

问题:

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

如果我这样做

os.path.join(os.path.dirname(__file__), 'bin')
为了尝试获取dev环境的路径,我将为部署环境提供一个不同的路径

是否有一种更通用的方法可以找到bin目录,这样我就不需要依赖if语句来确定基于当前env的目录数量?这似乎不够灵活,并且在以后移动代码时可能会导致其他问题


编辑:我的猜测是,我可能可以使用setup.py执行此操作,但我对该文件不太熟悉,无法确定在何处查找。

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

如果您的应用程序只是一个实用程序,那么您可以有两个配置文件,可能是json、yaml,甚至是py文件。在开发过程中使用其中一个文件,并将另一个文件与最终生成捆绑在一起。它们看起来是这样的:

# config.json
{
    'path_script': 'foo/pj/lib/script.py'
    'path_bin': 'foo/pj/bin'
}
您的程序总是在同一个位置查找config.json:在构建应用程序进行分发时切换文件

如果您的应用程序是一个服务器,最干净的方法是在可源shell文件中使用环境变量。这在virtualenv中非常有效。例如,您可以在项目根目录中包含此环境文件:

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进行开发时,使用sourceenv而不是virtualenv。在生产环境中运行应用程序时,在采购之前导出应用程序_ENV=生产。您可以在upstart、supervisor或systemd中设置环境变量,无论您使用什么软件来运行服务器


请注意,这种方法可以扩展到您可能需要的任何其他配置,因为大多数配置在开发和生产过程中有所不同:SQL地址和登录名、API密钥等。

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

如果您的应用程序只是一个实用程序,那么您可以有两个配置文件,可能是json、yaml,甚至是py文件。在开发过程中使用其中一个文件,并将另一个文件与最终生成捆绑在一起。它们看起来是这样的:

# config.json
{
    'path_script': 'foo/pj/lib/script.py'
    'path_bin': 'foo/pj/bin'
}
您的程序总是在同一个位置查找config.json:在构建应用程序进行分发时切换文件

如果您的应用程序是一个服务器,最干净的方法是在可源shell文件中使用环境变量。这在virtualenv中非常有效。例如,您可以在项目根目录中包含此环境文件:

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进行开发时,使用sourceenv而不是virtualenv。在生产环境中运行应用程序时,在采购之前导出应用程序_ENV=生产。您可以在upstart、supervisor或systemd中设置环境变量,无论您使用什么软件来运行服务器

请注意,这种方法可以扩展到您可能需要的任何其他配置,因为大多数配置在开发和生产过程中会有所不同:SQL地址和登录名、API密钥等