2016-08-17 44 views
-3

假设我正在从setup.py安装python应用程序,并且在virtualenv中这样做。另外,假设我需要提供诸如API密钥/ URI之类的应用程序敏感配置。在虚拟环境中处理配置文件安装的Pythonic方法?

我的virtualenv可能是一个路径,例如:

/opt/appname/venv 

我相信,我希望能够安装默认的配置文件的应用程序成功执行之前修改的用户。

默认的例子可能被安装到:

/etc/appname/config.sample 

是,如果我在一个virtualenv中,setup.py/setuptools的真的不处理安装到一个全球性的路径(据我的问题知道)。

什么是最好的pythonic方式来处理这种相当常见的情况?

+0

你的问题有点含糊。你在说什么全球路径。一个具体的例子会非常有用。请[编辑]你的问题并提供这些信息。 – martineau

+0

我不认为它是模糊的。一个具体的例子是不可能的,因为它是pythonic风格的问题。 –

+0

您是否考虑过替代安装的选项? https://docs.python.org/3/install/index.html#alternate-installation – creativeChips

回答

1

假定配置文件改变虚拟环境变量,这就是为什么它要推出的虚拟环境中之前被修改,那么你可以修改位于./venv/bin完成这一任务的activate bash脚本。所以,如果你想从一个配置文件中添加一个全球性的路径,然后在activate最后一行可能是:

MY_GLOBAL_PATH=<program that looks into config file and returns path> 

那么虚拟环境可以被激活,因为它通常会:

source ./venv/bin/activate 
+0

不能解决问题。 –

+0

我喜欢让我的Python应用程序尽可能地保持原有的文件系统(包括配置文件),并使用环境变量。当使用虚拟envs并使用'os.getenv'方法时,我发现这是一个非常干净的范例。我通过使用由pyvenv创建的'VIRTUAL_ENV'变量来实现此目的,以通过项目目录查找文件,或者通过额外的bash变量脚本来获取包含项目目录之外的配置文件的位置。如果你想使用更少的bash和更多的python,你可以使用'os'模块来设置和获取环境变量。 –

+0

cfm允许干净地以集中管理的方式部署配置文件。特别有用的是像加密的数据库/保险库这样的实用程序,用于动态/安全地记录API密钥等。环境变量可能很危险,因为命名空间冲突更容易。恕我直言。 –

-1

有你尝试使用Python的site-specific configuration选项?在我看来,像.pth文件和sitecustomize.py文件可能会有所帮助。
另请参阅:Accepted answer on "Using .pth files"

如果没有更具体的“全球路径”例子的更具体的例子 - 即使这在一定程度上这是一个一般性的问题,给出更精确的细节可能很难做到。

相关问题