Repository: omni-us/jsonargparse
Pull request #145 (2022-07-07 16:57:19)

Relax constraint on env_prefix when reading from environment
Reading parameters from environment is a great feature, but user
can sometimes want to not have any prefix when reading environement
variables.
This patch introduces another parameter named empty_env_prefix,
that if set to True, will initialize env_prefix to None, and hence unlock
what has been described above.

sonarcloud[bot]: Kudos, SonarCloud Quality Gate passed!&nbsp; &nbsp; [![Quality Gate passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/passed-16px.png 'Quality Gate passed')](https://sonarcloud.io/dashboard?id=omni-us_jsonargparse&pullRequest=145)

[![Bug](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/bug-16px.png 'Bug')](https://sonarcloud.io/project/issues?id=omni-us_jsonargparse&pullRequest=145&resolved=false&types=BUG) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/issues?id=omni-us_jsonargparse&pullRequest=145&resolved=false&types=BUG) [0 Bugs](https://sonarcloud.io/project/issues?id=omni-us_jsonargparse&pullRequest=145&resolved=false&types=BUG)  
[![Vulnerability](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/vulnerability-16px.png 'Vulnerability')](https://sonarcloud.io/project/issues?id=omni-us_jsonargparse&pullRequest=145&resolved=false&types=VULNERABILITY) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/issues?id=omni-us_jsonargparse&pullRequest=145&resolved=false&types=VULNERABILITY) [0 Vulnerabilities](https://sonarcloud.io/project/issues?id=omni-us_jsonargparse&pullRequest=145&resolved=false&types=VULNERABILITY)  
[![Security Hotspot](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/security_hotspot-16px.png 'Security Hotspot')](https://sonarcloud.io/project/security_hotspots?id=omni-us_jsonargparse&pullRequest=145&resolved=false&types=SECURITY_HOTSPOT) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/security_hotspots?id=omni-us_jsonargparse&pullRequest=145&resolved=false&types=SECURITY_HOTSPOT) [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=omni-us_jsonargparse&pullRequest=145&resolved=false&types=SECURITY_HOTSPOT)  
[![Code Smell](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/code_smell-16px.png 'Code Smell')](https://sonarcloud.io/project/issues?id=omni-us_jsonargparse&pullRequest=145&resolved=false&types=CODE_SMELL) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/issues?id=omni-us_jsonargparse&pullRequest=145&resolved=false&types=CODE_SMELL) [0 Code Smells](https://sonarcloud.io/project/issues?id=omni-us_jsonargparse&pullRequest=145&resolved=false&types=CODE_SMELL)

[![No Coverage information](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/CoverageChart/NoCoverageInfo-16px.png 'No Coverage information')](https://sonarcloud.io/component_measures?id=omni-us_jsonargparse&pullRequest=145) No Coverage information  
[![No Duplication information](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/Duplications/NoDuplicationInfo-16px.png 'No Duplication information')](https://sonarcloud.io/component_measures?id=omni-us_jsonargparse&pullRequest=145&metric=duplicated_lines_density&view=list) No Duplication information


sonarcloud[bot]: Kudos, SonarCloud Quality Gate passed!&nbsp; &nbsp; [![Quality Gate passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/passed-16px.png 'Quality Gate passed')](https://sonarcloud.io/dashboard?id=omni-us_jsonargparse&pullRequest=145)

[![Bug](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/bug-16px.png 'Bug')](https://sonarcloud.io/project/issues?id=omni-us_jsonargparse&pullRequest=145&resolved=false&types=BUG) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/issues?id=omni-us_jsonargparse&pullRequest=145&resolved=false&types=BUG) [0 Bugs](https://sonarcloud.io/project/issues?id=omni-us_jsonargparse&pullRequest=145&resolved=false&types=BUG)  
[![Vulnerability](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/vulnerability-16px.png 'Vulnerability')](https://sonarcloud.io/project/issues?id=omni-us_jsonargparse&pullRequest=145&resolved=false&types=VULNERABILITY) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/issues?id=omni-us_jsonargparse&pullRequest=145&resolved=false&types=VULNERABILITY) [0 Vulnerabilities](https://sonarcloud.io/project/issues?id=omni-us_jsonargparse&pullRequest=145&resolved=false&types=VULNERABILITY)  
[![Security Hotspot](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/security_hotspot-16px.png 'Security Hotspot')](https://sonarcloud.io/project/security_hotspots?id=omni-us_jsonargparse&pullRequest=145&resolved=false&types=SECURITY_HOTSPOT) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/security_hotspots?id=omni-us_jsonargparse&pullRequest=145&resolved=false&types=SECURITY_HOTSPOT) [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=omni-us_jsonargparse&pullRequest=145&resolved=false&types=SECURITY_HOTSPOT)  
[![Code Smell](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/code_smell-16px.png 'Code Smell')](https://sonarcloud.io/project/issues?id=omni-us_jsonargparse&pullRequest=145&resolved=false&types=CODE_SMELL) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/issues?id=omni-us_jsonargparse&pullRequest=145&resolved=false&types=CODE_SMELL) [0 Code Smells](https://sonarcloud.io/project/issues?id=omni-us_jsonargparse&pullRequest=145&resolved=false&types=CODE_SMELL)

[![No Coverage information](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/CoverageChart/NoCoverageInfo-16px.png 'No Coverage information')](https://sonarcloud.io/component_measures?id=omni-us_jsonargparse&pullRequest=145) No Coverage information  
[![No Duplication information](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/Duplications/NoDuplicationInfo-16px.png 'No Duplication information')](https://sonarcloud.io/component_measures?id=omni-us_jsonargparse&pullRequest=145&metric=duplicated_lines_density&view=list) No Duplication information


sonarcloud[bot]: Kudos, SonarCloud Quality Gate passed!&nbsp; &nbsp; [![Quality Gate passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/passed-16px.png 'Quality Gate passed')](https://sonarcloud.io/dashboard?id=omni-us_jsonargparse&pullRequest=145)

[![Bug](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/bug-16px.png 'Bug')](https://sonarcloud.io/project/issues?id=omni-us_jsonargparse&pullRequest=145&resolved=false&types=BUG) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/issues?id=omni-us_jsonargparse&pullRequest=145&resolved=false&types=BUG) [0 Bugs](https://sonarcloud.io/project/issues?id=omni-us_jsonargparse&pullRequest=145&resolved=false&types=BUG)  
[![Vulnerability](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/vulnerability-16px.png 'Vulnerability')](https://sonarcloud.io/project/issues?id=omni-us_jsonargparse&pullRequest=145&resolved=false&types=VULNERABILITY) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/issues?id=omni-us_jsonargparse&pullRequest=145&resolved=false&types=VULNERABILITY) [0 Vulnerabilities](https://sonarcloud.io/project/issues?id=omni-us_jsonargparse&pullRequest=145&resolved=false&types=VULNERABILITY)  
[![Security Hotspot](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/security_hotspot-16px.png 'Security Hotspot')](https://sonarcloud.io/project/security_hotspots?id=omni-us_jsonargparse&pullRequest=145&resolved=false&types=SECURITY_HOTSPOT) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/security_hotspots?id=omni-us_jsonargparse&pullRequest=145&resolved=false&types=SECURITY_HOTSPOT) [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=omni-us_jsonargparse&pullRequest=145&resolved=false&types=SECURITY_HOTSPOT)  
[![Code Smell](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/code_smell-16px.png 'Code Smell')](https://sonarcloud.io/project/issues?id=omni-us_jsonargparse&pullRequest=145&resolved=false&types=CODE_SMELL) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/issues?id=omni-us_jsonargparse&pullRequest=145&resolved=false&types=CODE_SMELL) [0 Code Smells](https://sonarcloud.io/project/issues?id=omni-us_jsonargparse&pullRequest=145&resolved=false&types=CODE_SMELL)

[![No Coverage information](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/CoverageChart/NoCoverageInfo-16px.png 'No Coverage information')](https://sonarcloud.io/component_measures?id=omni-us_jsonargparse&pullRequest=145) No Coverage information  
[![No Duplication information](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/Duplications/NoDuplicationInfo-16px.png 'No Duplication information')](https://sonarcloud.io/component_measures?id=omni-us_jsonargparse&pullRequest=145&metric=duplicated_lines_density&view=list) No Duplication information


sonarcloud[bot]: Kudos, SonarCloud Quality Gate passed!&nbsp; &nbsp; [![Quality Gate passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/passed-16px.png 'Quality Gate passed')](https://sonarcloud.io/dashboard?id=omni-us_jsonargparse&pullRequest=145)

[![Bug](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/bug-16px.png 'Bug')](https://sonarcloud.io/project/issues?id=omni-us_jsonargparse&pullRequest=145&resolved=false&types=BUG) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/issues?id=omni-us_jsonargparse&pullRequest=145&resolved=false&types=BUG) [0 Bugs](https://sonarcloud.io/project/issues?id=omni-us_jsonargparse&pullRequest=145&resolved=false&types=BUG)  
[![Vulnerability](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/vulnerability-16px.png 'Vulnerability')](https://sonarcloud.io/project/issues?id=omni-us_jsonargparse&pullRequest=145&resolved=false&types=VULNERABILITY) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/issues?id=omni-us_jsonargparse&pullRequest=145&resolved=false&types=VULNERABILITY) [0 Vulnerabilities](https://sonarcloud.io/project/issues?id=omni-us_jsonargparse&pullRequest=145&resolved=false&types=VULNERABILITY)  
[![Security Hotspot](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/security_hotspot-16px.png 'Security Hotspot')](https://sonarcloud.io/project/security_hotspots?id=omni-us_jsonargparse&pullRequest=145&resolved=false&types=SECURITY_HOTSPOT) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/security_hotspots?id=omni-us_jsonargparse&pullRequest=145&resolved=false&types=SECURITY_HOTSPOT) [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=omni-us_jsonargparse&pullRequest=145&resolved=false&types=SECURITY_HOTSPOT)  
[![Code Smell](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/code_smell-16px.png 'Code Smell')](https://sonarcloud.io/project/issues?id=omni-us_jsonargparse&pullRequest=145&resolved=false&types=CODE_SMELL) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/issues?id=omni-us_jsonargparse&pullRequest=145&resolved=false&types=CODE_SMELL) [0 Code Smells](https://sonarcloud.io/project/issues?id=omni-us_jsonargparse&pullRequest=145&resolved=false&types=CODE_SMELL)

[![No Coverage information](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/CoverageChart/NoCoverageInfo-16px.png 'No Coverage information')](https://sonarcloud.io/component_measures?id=omni-us_jsonargparse&pullRequest=145) No Coverage information  
[![No Duplication information](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/Duplications/NoDuplicationInfo-16px.png 'No Duplication information')](https://sonarcloud.io/component_measures?id=omni-us_jsonargparse&pullRequest=145&metric=duplicated_lines_density&view=list) No Duplication information


sonarcloud[bot]: Kudos, SonarCloud Quality Gate passed!&nbsp; &nbsp; [![Quality Gate passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/passed-16px.png 'Quality Gate passed')](https://sonarcloud.io/dashboard?id=omni-us_jsonargparse&pullRequest=145)

[![Bug](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/bug-16px.png 'Bug')](https://sonarcloud.io/project/issues?id=omni-us_jsonargparse&pullRequest=145&resolved=false&types=BUG) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/issues?id=omni-us_jsonargparse&pullRequest=145&resolved=false&types=BUG) [0 Bugs](https://sonarcloud.io/project/issues?id=omni-us_jsonargparse&pullRequest=145&resolved=false&types=BUG)  
[![Vulnerability](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/vulnerability-16px.png 'Vulnerability')](https://sonarcloud.io/project/issues?id=omni-us_jsonargparse&pullRequest=145&resolved=false&types=VULNERABILITY) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/issues?id=omni-us_jsonargparse&pullRequest=145&resolved=false&types=VULNERABILITY) [0 Vulnerabilities](https://sonarcloud.io/project/issues?id=omni-us_jsonargparse&pullRequest=145&resolved=false&types=VULNERABILITY)  
[![Security Hotspot](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/security_hotspot-16px.png 'Security Hotspot')](https://sonarcloud.io/project/security_hotspots?id=omni-us_jsonargparse&pullRequest=145&resolved=false&types=SECURITY_HOTSPOT) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/security_hotspots?id=omni-us_jsonargparse&pullRequest=145&resolved=false&types=SECURITY_HOTSPOT) [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=omni-us_jsonargparse&pullRequest=145&resolved=false&types=SECURITY_HOTSPOT)  
[![Code Smell](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/code_smell-16px.png 'Code Smell')](https://sonarcloud.io/project/issues?id=omni-us_jsonargparse&pullRequest=145&resolved=false&types=CODE_SMELL) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/issues?id=omni-us_jsonargparse&pullRequest=145&resolved=false&types=CODE_SMELL) [0 Code Smells](https://sonarcloud.io/project/issues?id=omni-us_jsonargparse&pullRequest=145&resolved=false&types=CODE_SMELL)

[![No Coverage information](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/CoverageChart/NoCoverageInfo-16px.png 'No Coverage information')](https://sonarcloud.io/component_measures?id=omni-us_jsonargparse&pullRequest=145) No Coverage information  
[![No Duplication information](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/Duplications/NoDuplicationInfo-16px.png 'No Duplication information')](https://sonarcloud.io/component_measures?id=omni-us_jsonargparse&pullRequest=145&metric=duplicated_lines_density&view=list) No Duplication information


sonarcloud[bot]: Kudos, SonarCloud Quality Gate passed!&nbsp; &nbsp; [![Quality Gate passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/passed-16px.png 'Quality Gate passed')](https://sonarcloud.io/dashboard?id=omni-us_jsonargparse&pullRequest=145)

[![Bug](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/bug-16px.png 'Bug')](https://sonarcloud.io/project/issues?id=omni-us_jsonargparse&pullRequest=145&resolved=false&types=BUG) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/issues?id=omni-us_jsonargparse&pullRequest=145&resolved=false&types=BUG) [0 Bugs](https://sonarcloud.io/project/issues?id=omni-us_jsonargparse&pullRequest=145&resolved=false&types=BUG)  
[![Vulnerability](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/vulnerability-16px.png 'Vulnerability')](https://sonarcloud.io/project/issues?id=omni-us_jsonargparse&pullRequest=145&resolved=false&types=VULNERABILITY) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/issues?id=omni-us_jsonargparse&pullRequest=145&resolved=false&types=VULNERABILITY) [0 Vulnerabilities](https://sonarcloud.io/project/issues?id=omni-us_jsonargparse&pullRequest=145&resolved=false&types=VULNERABILITY)  
[![Security Hotspot](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/security_hotspot-16px.png 'Security Hotspot')](https://sonarcloud.io/project/security_hotspots?id=omni-us_jsonargparse&pullRequest=145&resolved=false&types=SECURITY_HOTSPOT) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/security_hotspots?id=omni-us_jsonargparse&pullRequest=145&resolved=false&types=SECURITY_HOTSPOT) [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=omni-us_jsonargparse&pullRequest=145&resolved=false&types=SECURITY_HOTSPOT)  
[![Code Smell](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/code_smell-16px.png 'Code Smell')](https://sonarcloud.io/project/issues?id=omni-us_jsonargparse&pullRequest=145&resolved=false&types=CODE_SMELL) [![A](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/RatingBadge/A-16px.png 'A')](https://sonarcloud.io/project/issues?id=omni-us_jsonargparse&pullRequest=145&resolved=false&types=CODE_SMELL) [0 Code Smells](https://sonarcloud.io/project/issues?id=omni-us_jsonargparse&pullRequest=145&resolved=false&types=CODE_SMELL)

[![No Coverage information](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/CoverageChart/NoCoverageInfo-16px.png 'No Coverage information')](https://sonarcloud.io/component_measures?id=omni-us_jsonargparse&pullRequest=145) No Coverage information  
[![No Duplication information](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/Duplications/NoDuplicationInfo-16px.png 'No Duplication information')](https://sonarcloud.io/component_measures?id=omni-us_jsonargparse&pullRequest=145&metric=duplicated_lines_density&view=list) No Duplication information


mougams: All tests/checks pass. But I'm not sure to understand why Windows 2019 test fail with

 `ModuleNotFoundError: No module named 'jsonargparse'`

Patch:
diff --git a/CHANGELOG.rst b/CHANGELOG.rst
index 1c801f1..5e5d4a4 100644
--- a/CHANGELOG.rst
+++ b/CHANGELOG.rst
@@ -14,6 +14,20 @@ The semantic versioning only considers the public API as described in
 paths are considered internals and can change in any moment.
 
 
+v4.11.0 (2022-07-??)
+--------------------
+
+Added
+^^^^^
+- ``env_prefix`` property now also accepts boolean. If set to False,
+when default env feature is enabled, it won't add any prefix when reading
+parameters from environment variables.
+
+Deprecated
+^^^^^^^^^^
+- ``env_prefix`` property will no longer accept ``None`` in v5.0.0.
+
+
 v4.10.3 (2022-07-??)
 --------------------
 
diff --git a/README.rst b/README.rst
index a81d791..a382aa8 100644
--- a/README.rst
+++ b/README.rst
@@ -1693,9 +1693,9 @@ Environment variables
 The jsonargparse parsers can also get values from environment variables. The
 parser checks existing environment variables whose name is of the form
 ``[PREFIX_][LEV__]*OPT``, that is, all in upper case, first a prefix (set by
-``env_prefix``, or if unset the ``prog`` without extension) followed by
-underscore and then the argument name replacing dots with two underscores. Using
-the parser from the :ref:`nested-namespaces` section above, in your shell you
+``env_prefix``, or if unset the ``prog`` without extension or none if set to False)
+followed by underscore and then the argument name replacing dots with two underscores.
+Using the parser from the :ref:`nested-namespaces` section above, in your shell you
 would set the environment variables as:
 
 .. code-block:: bash
diff --git a/jsonargparse/actions.py b/jsonargparse/actions.py
index d0594a1..eb51835 100644
--- a/jsonargparse/actions.py
+++ b/jsonargparse/actions.py
@@ -817,7 +817,7 @@ def parent_parsers_context(key, parser):
 class _ActionSubCommands(_SubParsersAction):
     """Extension of argparse._SubParsersAction to modify subcommands functionality."""
 
-    _env_prefix: Optional[str] = None
+    _env_prefix: Union[bool, str] = True
 
 
     def add_parser(self, name, **kwargs):
diff --git a/jsonargparse/core.py b/jsonargparse/core.py
index 7b50113..b88cfbb 100644
--- a/jsonargparse/core.py
+++ b/jsonargparse/core.py
@@ -162,7 +162,7 @@ class ArgumentParser(ActionsContainer, argparse.ArgumentParser):
     def __init__(
         self,
         *args,
-        env_prefix: Optional[str] = None,
+        env_prefix: Union[bool, str] = True,
         error_handler: Optional[Callable[['ArgumentParser', str], None]] = usage_and_exit_error_handler,
         formatter_class: Type[DefaultHelpFormatter] = DefaultHelpFormatter,
         logger: Union[bool, str, dict, logging.Logger] = False,
@@ -1390,7 +1390,7 @@ class ArgumentParser(ActionsContainer, argparse.ArgumentParser):
 
 
     @property
-    def env_prefix(self) -> Optional[str]:
+    def env_prefix(self) -> Union[bool, str]:
         """The environment variables prefix property.
 
         :getter: Returns the current environment variables prefix.
@@ -1399,12 +1399,17 @@ class ArgumentParser(ActionsContainer, argparse.ArgumentParser):
         Raises:
             ValueError: If an invalid value is given.
         """
-        return self._env_prefix
+        return self._env_prefix  # type: ignore
 
 
     @env_prefix.setter
-    def env_prefix(self, env_prefix: Optional[str]):
-        if env_prefix is None:
+    def env_prefix(self, env_prefix: Union[bool, str]):
+        if env_prefix is False:
+            self._env_prefix = None
+        elif env_prefix in {True, None}:
+            if env_prefix is None:
+                from .deprecated import deprecation_warning, env_prefix_property_none_message
+                deprecation_warning(ArgumentParser, env_prefix_property_none_message)
             self._env_prefix = os.path.splitext(self.prog)[0]
         elif isinstance(env_prefix, str):
             self._env_prefix = env_prefix
diff --git a/jsonargparse/deprecated.py b/jsonargparse/deprecated.py
index 632149a..2765ab7 100644
--- a/jsonargparse/deprecated.py
+++ b/jsonargparse/deprecated.py
@@ -250,3 +250,8 @@ logger_property_none_message = """
     Setting the logger property to None was deprecated in v4.10.0 and will raise
     an exception in v5.0.0. Use False instead.
 """
+
+env_prefix_property_none_message = """
+    Setting the env_prefix property to None was deprecated in v4.11.0 and will raise
+    an exception in v5.0.0. Use True instead.
+"""
diff --git a/setup.cfg b/setup.cfg
index 36a0727..322b08e 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -138,8 +138,8 @@ extras =
     ruyaml
     omegaconf
 changedir = jsonargparse_tests
-commands = python3 -m unittest
-#usedevelop = true
+commands = python -m unittest
+usedevelop = true
 passenv = JSONARGPARSE_*
 
 


Test patch:
diff --git a/jsonargparse_tests/test_core.py b/jsonargparse_tests/test_core.py
index c151cfd..a239296 100755
--- a/jsonargparse_tests/test_core.py
+++ b/jsonargparse_tests/test_core.py
@@ -40,7 +40,7 @@ from jsonargparse.optionals import (
 )
 from jsonargparse.typing import NotEmptyStr, Path_fc, Path_fr, PositiveFloat, PositiveInt
 from jsonargparse.util import CaptureParserException, capture_parser, DebugException
-from jsonargparse_tests.base import is_cpython, is_posix, responses_activate, responses_available, TempDirTestCase
+from jsonargparse_tests.base import is_posix, responses_activate, responses_available, TempDirTestCase
 
 
 def example_parser():
@@ -166,6 +166,24 @@ class ParsersTests(TempDirTestCase):
             self.assertFalse(parser.default_env)
 
 
+    def test_env_prefix(self):
+        parser = ArgumentParser(env_prefix=True, default_env=True, error_handler=None)
+        parser.add_argument("--test_arg", type=str, required=True, help="Test argument")
+        with self.assertRaises(ParserError):
+            with unittest.mock.patch.dict(os.environ, {'TEST_ARG': 'one'}):
+                parser.parse_args([])
+        prefix = os.path.splitext(parser.prog)[0].upper()
+        with unittest.mock.patch.dict(os.environ, {f'{prefix}_TEST_ARG': 'one'}):
+            cfg = parser.parse_args([])
+            self.assertEqual('one', cfg.test_arg)
+
+        parser = ArgumentParser(env_prefix=False, default_env=True)
+        parser.add_argument("--test_arg", type=str, required=True, help="Test argument")
+        with unittest.mock.patch.dict(os.environ, {'TEST_ARG': 'one'}):
+            cfg = parser.parse_args([])
+            self.assertEqual('one', cfg.test_arg)
+
+
     def test_parse_string(self):
         parser = example_parser()
 
@@ -931,7 +949,7 @@ class ConfigFilesTests(TempDirTestCase):
         outval = ' '.join(out.getvalue().split())
         self.assertIn('tried getting defaults considering default_config_files but failed', outval)
 
-        if is_posix and is_cpython:
+        if is_posix:
             os.chmod(default_config_file, 0)
             self.assertEqual(parser.get_default('op1'), 'from default')
 
diff --git a/jsonargparse_tests/test_deprecated.py b/jsonargparse_tests/test_deprecated.py
index 922c86d..078b0cb 100755
--- a/jsonargparse_tests/test_deprecated.py
+++ b/jsonargparse_tests/test_deprecated.py
@@ -171,6 +171,12 @@ class DeprecatedTests(unittest.TestCase):
             self.assertIn(' Setting the logger property to None was deprecated', str(w[-1].message))
 
 
+    def test_env_prefix_none(self):
+        with catch_warnings(record=True) as w:
+            ArgumentParser(env_prefix=None)
+            self.assertIn('env_prefix', str(w[-1].message))
+
+
 class DeprecatedTempDirTests(TempDirTestCase):
 
     def test_parse_as_dict(self):
diff --git a/jsonargparse_tests/test_jsonschema.py b/jsonargparse_tests/test_jsonschema.py
index b18f8c4..141b959 100755
--- a/jsonargparse_tests/test_jsonschema.py
+++ b/jsonargparse_tests/test_jsonschema.py
@@ -7,7 +7,7 @@ import unittest
 from io import StringIO
 from jsonargparse import ActionConfigFile, ActionJsonSchema, ArgumentParser, ParserError
 from jsonargparse.optionals import jsonschema_support
-from jsonargparse_tests.base import is_cpython, is_posix, TempDirTestCase
+from jsonargparse_tests.base import is_posix, TempDirTestCase
 
 
 schema1 = {
@@ -99,7 +99,7 @@ class JsonSchemaTests(TempDirTestCase):
         self.assertEqual(op2_val, cfg.op3['n1'][0])
         parser.check_config(cfg, skip_none=True)
 
-        if is_posix and is_cpython:
+        if is_posix:
             os.chmod(op1_file, 0)
             self.assertRaises(ParserError, lambda: parser.parse_path(cfg1_file))
 
diff --git a/jsonargparse_tests/test_util.py b/jsonargparse_tests/test_util.py
index 583f805..e48cb6d 100755
--- a/jsonargparse_tests/test_util.py
+++ b/jsonargparse_tests/test_util.py
@@ -4,17 +4,14 @@ import logging
 import os
 import stat
 import pathlib
-import platform
 import unittest
 import zipfile
 from jsonargparse import ArgumentParser, LoggerProperty, null_logger, Path
 from jsonargparse.optionals import fsspec_support, import_fsspec, reconplogger_support, url_support
 from jsonargparse.util import get_import_path, import_object, register_unresolvable_import_paths
-from jsonargparse_tests.base import is_cpython, is_posix, mock_module, responses_activate, responses_available, suppress_stderr, TempDirTestCase
+from jsonargparse_tests.base import is_posix, mock_module, responses_activate, responses_available, suppress_stderr, TempDirTestCase
 
 
-@unittest.skipIf(not (is_posix and is_cpython),
-                 'Path class currently only supported in posix systems and CPython')
 class PathTests(TempDirTestCase):
 
     def setUp(self):
@@ -67,6 +64,7 @@ class PathTests(TempDirTestCase):
         self.assertEqual(path.cwd, Path('file_rx', mode='fr', cwd=path.cwd).cwd)
 
 
+    @unittest.skipIf(not is_posix, 'requires posix system')
     def test_file_access_mode(self):
         Path(self.file_rw, 'frw')
         Path(self.file_r, 'fr')
@@ -80,11 +78,13 @@ class PathTests(TempDirTestCase):
         self.assertRaises(TypeError, lambda: Path('file_ne', 'fr'))
 
 
+    @unittest.skipIf(not is_posix, 'requires posix system')
     def test_get_contents(self):
         self.assertEqual('file contents', Path(self.file_r, 'fr').get_content())
         self.assertEqual('file contents', Path('file://'+self.tmpdir+'/'+self.file_r, 'fr').get_content())
 
 
+    @unittest.skipIf(not is_posix, 'requires posix system')
     def test_dir_access_mode(self):
         Path(self.dir_rwx, 'drwx')
         Path(self.dir_rx, 'drx')
@@ -94,6 +94,7 @@ class PathTests(TempDirTestCase):
         self.assertRaises(TypeError, lambda: Path(self.file_r, 'dr'))
 
 
+    @unittest.skipIf(not is_posix, 'requires posix system')
     def test_create_mode(self):
         Path(self.file_rw, 'fcrw')
         Path(os.path.join(self.tmpdir, 'file_c'), 'fc')
@@ -131,6 +132,7 @@ class PathTests(TempDirTestCase):
         self.assertTrue(path.__repr__().startswith('Path_frw('))
 
 
+    @unittest.skipIf(not is_posix, 'requires posix system')
     def test_tilde_home(self):
         with unittest.mock.patch.dict(os.environ, {'HOME': self.tmpdir}):
             home = Path('~', 'dr')
@@ -164,6 +166,7 @@ class PathTests(TempDirTestCase):
 
 
     @unittest.skipIf(not fsspec_support, 'fsspec package is required')
+    @unittest.skipIf(not is_posix, 'requires posix system')
     def test_fsspec(self):
 
         def create_zip(zip_path, file_path):