如何在PyCharm中设置环境变量?

sqyvllje  于 2023-02-04  发布在  PyCharm
关注(0)|答案(2)|浏览(280)

我试图运行一系列的测试,为一个python项目在PyCharm,并已运行到os. environ [] KeyErrors近不间断的过去几天.设备是MacBook Pro M2.
我可以从内置的"终端"访问env变量,但是要启动python并使用os.environ进行测试,但是当我实际运行测试或调试时就不行了,这就是KeyErrors出现的时候。
以下是我目前所做的工作:
1.我转到"运行"〉"编辑配置",并在其中添加了我的环境变量
1.我转到设置〉构建、执行、部署〉控制台〉Python控制台,并将它们添加到那里
1.转到工具〉终端并执行相同操作。
目前的解决方案是为每个单独的测试添加一个EnvFile配置!看起来Run〉Edit Configurations绝对没有任何作用,除非我指定确切的file_name/python_function。为整个测试文件夹创建一个运行配置看起来没有任何作用。
下面是我的config.xml文件的内容:

<component name="ProjectRunConfigurationManager">
  <configuration default="false" name="Unittests in tests/unit" type="tests" factoryName="Unittests">
    <module name="smde_refactor" />
    <option name="INTERPRETER_OPTIONS" value="" />
    <option name="PARENT_ENVS" value="true" />
    <option name="SDK_HOME" value="$PROJECT_DIR$/venv/bin/python" />
    <option name="SDK_NAME" value="Python 3.10 (smde_refactor)" />
    <option name="WORKING_DIRECTORY" value="" />
    <option name="IS_MODULE_SDK" value="false" />
    <option name="ADD_CONTENT_ROOTS" value="true" />
    <option name="ADD_SOURCE_ROOTS" value="true" />
    <EXTENSION ID="net.ashald.envfile">
      <option name="IS_ENABLED" value="true" />
      <option name="IS_SUBST" value="false" />
      <option name="IS_PATH_MACRO_SUPPORTED" value="false" />
      <option name="IS_IGNORE_MISSING_FILES" value="false" />
      <option name="IS_ENABLE_EXPERIMENTAL_INTEGRATIONS" value="false" />
      <ENTRIES>
        <ENTRY IS_ENABLED="true" PARSER="runconfig" IS_EXECUTABLE="false" />
        <ENTRY IS_ENABLED="true" PARSER="env" IS_EXECUTABLE="false" PATH="tests/unit/environment.env" />
      </ENTRIES>
    </EXTENSION>
    <option name="_new_pattern" value="&quot;&quot;" />
    <option name="_new_additionalArguments" value="&quot;&quot;" />
    <option name="_new_target" value="&quot;$PROJECT_DIR$/tests/unit&quot;" />
    <option name="_new_targetType" value="&quot;PATH&quot;" />
    <method v="2" />
  </configuration>
</component>

^我知道这是一个文件夹而不是一个脚本--但是即使选择了一个特定的脚本,仍然无法使用该脚本中的任何函数来获取env变量。
如果我把一个. py脚本作为一个整体运行(在把env变量添加到运行配置之后),它会成功(os.environ被选中!),但是如果我单独运行这个. py脚本中的任何一个测试,它们都会失败(不能选中os.environ)。
谢谢大家!

fafcakar

fafcakar1#

好吧...
tmt是正确的--我真正需要做的就是在Run〉Edit Configurations中乱转几分钟。
关键是然后进入"编辑配置模板"。为了确保万无一失,我向Python、Python测试/Pytest和Python测试/UnitTests的模板添加了所需的env变量。
^这没有立即起作用。我必须删除我第一次打开运行〉编辑配置时出现的所有现有配置。
然后,瞧--文件夹中的所有pytests脚本+模块开始获取所需的env变量。

  • 顺便说一句,我认为EnvFile插件添加了
<ENTRY IS_ENABLED="true" PARSER="env" IS_EXECUTABLE="false" PATH="tests/unit/environment.env" />

行,而不是直接在. xml中指定键/值(无论如何,这并不奏效)

rekjcdws

rekjcdws2#

下面是在 tests/ 文件夹上调用Pytest的示例配置:

<component name="ProjectRunConfigurationManager">
  <configuration default="false" name="All tests" type="tests" factoryName="py.test">
    <module name="$PROJECT_NAME" />
    <option name="INTERPRETER_OPTIONS" value="" />
    <option name="PARENT_ENVS" value="true" />
    <envs>
      <env name="ABC" value="XXX" />
    </envs>
    <option name="SDK_HOME" value="" />
    <option name="WORKING_DIRECTORY" value="" />
    <option name="IS_MODULE_SDK" value="true" />
    <option name="ADD_CONTENT_ROOTS" value="true" />
    <option name="ADD_SOURCE_ROOTS" value="true" />
    <EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
    <option name="_new_keywords" value="&quot;&quot;" />
    <option name="_new_parameters" value="&quot;&quot;" />
    <option name="_new_additionalArguments" value="&quot;--tb\u003dshort&quot;"/>
    <option name="_new_target" value="&quot;$PROJECT_DIR$/tests&quot;" />
    <option name="_new_targetType" value="&quot;PATH&quot;" />
    <method v="2" />
  </configuration>
</component>

如您所见,有一个<envs>部分,其中ABC变量被设置为XXX。还要注意factoryNamepy.test,而不是您的Unittests,这是一个不同类型的运行配置。
当您点击编辑器中测试函数旁边的绿色箭头时,要为每个自动创建的运行配置自动设置env变量,您需要做两件事:
1.确保 * 首选项-〉工具-〉Python集成工具-〉测试-〉默认测试运行器 * 设置为 pytest
1.在 * 编辑配置... -〉编辑配置模板... -〉Python测试-〉pytest -〉环境变量 * 中设置所有你想要的env变量。

**然而,我意识到你使用的是EnvFile插件,这可能会使我上面写的演示内置PyCharm功能的内容完全无效。**如果你想测试我的示例,我建议你暂时禁用该插件。

相关问题