diff --git a/pydantic/env_settings.py b/pydantic/env_settings.py
--- a/pydantic/env_settings.py
+++ b/pydantic/env_settings.py
@@ -58,7 +58,7 @@ def _build_environ(
         env_file = _env_file if _env_file != env_file_sentinel else self.__config__.env_file
         env_file_encoding = _env_file_encoding if _env_file_encoding is not None else self.__config__.env_file_encoding
         if env_file is not None:
-            env_path = Path(env_file)
+            env_path = Path(env_file).expanduser()
             if env_path.is_file():
                 env_vars = {
                     **read_env_file(

diff --git a/tests/test_settings.py b/tests/test_settings.py
--- a/tests/test_settings.py
+++ b/tests/test_settings.py
@@ -1,4 +1,6 @@
 import os
+import uuid
+from pathlib import Path
 from typing import Dict, List, Optional, Set
 
 import pytest
@@ -547,6 +549,28 @@ class Config:
     assert s.pika == 'p!±@'
 
 
+@pytest.fixture
+def home_tmp():
+    tmp_filename = f'{uuid.uuid4()}.env'
+    home_tmp_path = Path.home() / tmp_filename
+    yield home_tmp_path, tmp_filename
+    home_tmp_path.unlink()
+
+
+@pytest.mark.skipif(not dotenv, reason='python-dotenv not installed')
+def test_env_file_home_directory(home_tmp):
+    home_tmp_path, tmp_filename = home_tmp
+    home_tmp_path.write_text('pika=baz')
+
+    class Settings(BaseSettings):
+        pika: str
+
+        class Config:
+            env_file = f'~/{tmp_filename}'
+
+    assert Settings().pika == 'baz'
+
+
 @pytest.mark.skipif(not dotenv, reason='python-dotenv not installed')
 def test_env_file_none(tmp_path):
     p = tmp_path / '.env'

Can't use ~ in dotenv file in Settings
@HenryDashwood The issue here is that you use `~/.env`, which is not directly resolved by `pathlib.Path`.
You could change it to

```python
   class Config:
        env_file = os.path.expanduser('~/.env')
```

Maybe we could add `expanduser` directly in the code when `env_path` is created

_Originally posted by @PrettyWood in https://github.com/samuelcolvin/pydantic/issues/1368#issuecomment-669312462_

tests/test_settings.py::test_env_file_home_directory
tests/test_settings.py::test_sub_env tests/test_settings.py::test_sub_env_override tests/test_settings.py::test_sub_env_missing tests/test_settings.py::test_other_setting tests/test_settings.py::test_with_prefix tests/test_settings.py::test_nested_env_with_basemodel tests/test_settings.py::test_nested_env_with_dict tests/test_settings.py::test_list tests/test_settings.py::test_set_dict_model tests/test_settings.py::test_invalid_json tests/test_settings.py::test_required_sub_model tests/test_settings.py::test_non_class tests/test_settings.py::test_env_str tests/test_settings.py::test_env_list tests/test_settings.py::test_env_list_field tests/test_settings.py::test_env_list_last tests/test_settings.py::test_env_inheritance tests/test_settings.py::test_env_inheritance_field tests/test_settings.py::test_env_prefix_inheritance_config tests/test_settings.py::test_env_inheritance_config tests/test_settings.py::test_env_invalid tests/test_settings.py::test_env_field tests/test_settings.py::test_aliases_warning tests/test_settings.py::test_aliases_no_warning tests/test_settings.py::test_case_sensitive tests/test_settings.py::test_case_insensitive tests/test_settings.py::test_nested_dataclass tests/test_settings.py::test_env_takes_precedence tests/test_settings.py::test_config_file_settings_nornir tests/test_settings.py::test_env_file_config tests/test_settings.py::test_env_file_config_case_sensitive tests/test_settings.py::test_env_file_export tests/test_settings.py::test_env_file_config_custom_encoding tests/test_settings.py::test_env_file_none tests/test_settings.py::test_env_file_override_file tests/test_settings.py::test_env_file_override_none tests/test_settings.py::test_env_file_not_a_file tests/test_settings.py::test_read_env_file_cast_sensitive tests/test_settings.py::test_read_env_file_syntax_wrong tests/test_settings.py::test_env_file_example tests/test_settings.py::test_env_file_custom_encoding tests/test_settings.py::test_alias_set tests/test_settings.py::test_prefix_on_parent tests/test_settings.py::test_frozenset