【问题标题】:Python Setup.py: set environment variable prior to running install_requiresPython Setup.py:在运行 install_requires 之前设置环境变量
【发布时间】:2019-06-25 07:56:53
【问题描述】:

最近,对 Apache Airflow 的更改需要设置环境变量 SLUGIFY_USES_TEXT_UNIDECODE=yes 才能安装: https://airflow.apache.org/installation.html

在我的自定义模块的 setup.py 脚本中,我将 Airflow 包含在 install_requires 列表中。因此,当我尝试安装自定义模块时,它也无法查找要设置的环境变量。

由于我有很多环境要安装它,我想在我的 setup.py 模块中自动设置该环境变量,以便它始终存在。但是,如果我只是将这一行放在 setup.py 的顶部或 install 的自定义子类的 run() 方法内部(通过 cmdclass setup.py 选项),它似乎不起作用。

os.environ['SLUGIFY_USES_TEXT_UNIDECODE'] = 'yes'

关于在安装任何install_requires 依赖项之前如何在 setup.py 中设置环境变量有什么想法吗?

非常感谢任何帮助。

【问题讨论】:

    标签: python pip environment-variables airflow setup.py


    【解决方案1】:

    如果您在pip install YOUR_CUSTOM_PACKAGE 之前运行export SLUGIFY_USES_TEXT_UNIDECODE=yes,它应该可以开箱即用。

    另一种选择是在您的setup.py 中使用以下内容:

    import os
    os.system("export SLUGIFY_USES_TEXT_UNIDECODE=yes")
    

    【讨论】:

    • 谢谢卡西尔。使用 os.system 代替 os.environ 的有趣想法。我会试试看。
    【解决方案2】:

    您的自定义模块是如何安装的?使用轮子?那么你运气不好,因为setuptools 在编译/打包时运行setup.py 而不是在安装时。使用轮子的唯一解决方案是在安装前设置环境变量:

    SLUGIFY_USES_TEXT_UNIDECODE=yes pip install …
    

    如果您从 sdist(源代码分发)安装,您使用 setup.py 的欺骗应该可以工作。

    【讨论】:

    • 谢谢博士。我目前正在使用 sdists(但最终使用轮子可能会很好)。是的,我希望避免在 pip install 之前设置环境变量,因为我有十几个地方可以包含它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-12
    • 2019-11-26
    • 1970-01-01
    • 2014-10-12
    • 2020-04-06
    相关资源
    最近更新 更多