diff --git a/ddsc/sdk/client.py b/ddsc/sdk/client.py
index e7b6e16..578c6d2 100644
--- a/ddsc/sdk/client.py
+++ b/ddsc/sdk/client.py
@@ -16,10 +16,12 @@ class Client(object):
     Client that connects to the DDSConnection base on ~/.ddsclient configuration.
     This configuration can be customized by passing in a ddsc.config.Config object
     """
-    def __init__(self, config=create_config()):
+    def __init__(self, config=None):
         """
         :param config: ddsc.config.Config: settings used to connect to DDSConnection
         """
+        if not config:
+            config = create_config()
         self.dds_connection = DDSConnection(config)
 
     def get_projects(self):
diff --git a/ddsc/sdk/dukeds.py b/ddsc/sdk/dukeds.py
index 7dc9418..3353cff 100644
--- a/ddsc/sdk/dukeds.py
+++ b/ddsc/sdk/dukeds.py
@@ -1,7 +1,6 @@
 from __future__ import absolute_import
 import logging
 from ddsc.sdk.client import Client, FileUpload, PathToFiles, ItemNotFound, DuplicateNameError
-from ddsc.config import create_config
 from ddsc.core.userutil import UserUtil
 
 
@@ -113,7 +112,7 @@ class Session(object):
     Contains methods for interacting with DukeDS using standard ddsclient config file and environment variables
     Same functionality as DukeDS but caches project list to improve performance.
     """
-    def __init__(self, config=create_config()):
+    def __init__(self, config=None):
         """
         :param config:  ddsc.config.Config: configuration specifying DukeDS endpoint and credential to use
         """

Importing DukeDS module checks config file
When a user imports the DukeDS module it reads and verifies the associated config file.

https://github.com/Duke-GCB/DukeDSClient/blob/0c15a9a50957abe806c7b2b6cad6a58f9d3aa61b/ddsc/sdk/client.py#L19

Importing a module shouldn't perform an action.
diff --git a/ddsc/sdk/tests/test_client.py b/ddsc/sdk/tests/test_client.py
index d103b2a..7a86bae 100644
--- a/ddsc/sdk/tests/test_client.py
+++ b/ddsc/sdk/tests/test_client.py
@@ -6,6 +6,19 @@ from mock import patch, Mock, ANY
 
 
 class TestClient(TestCase):
+    @patch('ddsc.sdk.client.create_config')
+    @patch('ddsc.sdk.client.DDSConnection', autospec=True)
+    def test_constructor_default_config(self, mock_dss_connection, mock_create_config):
+        Client()
+        mock_create_config.assert_called_with()
+
+    @patch('ddsc.sdk.client.create_config')
+    @patch('ddsc.sdk.client.DDSConnection', autospec=True)
+    def test_constructor_specify_config(self, mock_dss_connection, mock_create_config):
+        mock_config = Mock()
+        Client(mock_config)
+        mock_create_config.assert_not_called()
+
     @patch('ddsc.sdk.client.create_config')
     @patch('ddsc.sdk.client.DDSConnection')
     def test_get_projects(self, mock_dss_connection, mock_create_config):
diff --git a/ddsc/sdk/tests/test_dukeds.py b/ddsc/sdk/tests/test_dukeds.py
index eec8d06..91fd6a0 100644
--- a/ddsc/sdk/tests/test_dukeds.py
+++ b/ddsc/sdk/tests/test_dukeds.py
@@ -1,5 +1,5 @@
 from unittest import TestCase
-from ddsc import DukeDS, ItemNotFound, DuplicateNameError
+from ddsc import DukeDS, ItemNotFound, DuplicateNameError, Session
 from mock import patch, Mock, ANY
 
 
@@ -204,3 +204,16 @@ class TestDukeDS(TestCase):
         ]
         DukeDS.move_file_or_folder('myproject', '/data/file1.txt', '/data/file1_bak.txt')
         mock_project.move_file_or_folder.assert_called_with('/data/file1.txt', '/data/file1_bak.txt')
+
+
+class TestSession(TestCase):
+    @patch('ddsc.sdk.dukeds.Client', autospec=True)
+    def test_constructor_default_args(self, mock_client):
+        Session()
+        mock_client.assert_called_with(None)
+
+    @patch('ddsc.sdk.dukeds.Client', autospec=True)
+    def test_constructor_passing_config(self, mock_client):
+        mock_config = Mock()
+        Session(mock_config)
+        mock_client.assert_called_with(mock_config)

pip install -e .[dev]
parse_log_pytest
requirements.txt
flake8 coverage mock nose pytest
3.9
requirements.txt
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
certifi==2025.1.31
charset-normalizer==3.4.1
coverage==7.8.0
-e git+https://github.com/Duke-GCB/DukeDSClient.git@0c15a9a50957abe806c7b2b6cad6a58f9d3aa61b#egg=DukeDSClient
exceptiongroup==1.2.2
flake8==7.2.0
future==0.16.0
idna==3.10
iniconfig==2.1.0
mccabe==0.7.0
mock==5.2.0
nose==1.3.7
packaging==24.2
pluggy==1.5.0
pycodestyle==2.13.0
pyflakes==3.3.2
pytest==8.3.5
pytz==2025.2
PyYAML==5.1
requests==2.32.3
six==1.10.0
tomli==2.2.1
urllib3==2.3.0

name: DukeDSClient
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.4.4=h6a678d5_1
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=3.0.16=h5eee18b_0
  - pip=25.0=py39h06a4308_0
  - python=3.9.21=he870216_1
  - readline=8.2=h5eee18b_0
  - setuptools=75.8.0=py39h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - tzdata=2025a=h04d1e81_0
  - wheel=0.45.1=py39h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - certifi==2025.1.31
      - charset-normalizer==3.4.1
      - coverage==7.8.0
      - exceptiongroup==1.2.2
      - flake8==7.2.0
      - future==0.16.0
      - idna==3.10
      - iniconfig==2.1.0
      - mccabe==0.7.0
      - mock==5.2.0
      - nose==1.3.7
      - packaging==24.2
      - pluggy==1.5.0
      - pycodestyle==2.13.0
      - pyflakes==3.3.2
      - pytest==8.3.5
      - pytz==2025.2
      - pyyaml==5.1
      - requests==2.32.3
      - six==1.10.0
      - tomli==2.2.1
      - urllib3==2.3.0
prefix: /opt/conda/envs/DukeDSClient

ddsc/sdk/tests/test_client.py::TestClient::test_constructor_default_config ddsc/sdk/tests/test_dukeds.py::TestSession::test_constructor_default_args
ddsc/sdk/tests/test_client.py::TestClient::test_constructor_specify_config ddsc/sdk/tests/test_client.py::TestClient::test_create_project ddsc/sdk/tests/test_client.py::TestClient::test_get_file_by_id ddsc/sdk/tests/test_client.py::TestClient::test_get_folder_by_id ddsc/sdk/tests/test_client.py::TestClient::test_get_project_by_id ddsc/sdk/tests/test_client.py::TestClient::test_get_project_by_name__find_one ddsc/sdk/tests/test_client.py::TestClient::test_get_project_by_name__multiple_found ddsc/sdk/tests/test_client.py::TestClient::test_get_project_by_name__none_found ddsc/sdk/tests/test_client.py::TestClient::test_get_projects ddsc/sdk/tests/test_client.py::TestDDSConnection::test_create_folder ddsc/sdk/tests/test_client.py::TestDDSConnection::test_create_project ddsc/sdk/tests/test_client.py::TestDDSConnection::test_delete_file ddsc/sdk/tests/test_client.py::TestDDSConnection::test_delete_folder ddsc/sdk/tests/test_client.py::TestDDSConnection::test_delete_project ddsc/sdk/tests/test_client.py::TestDDSConnection::test_get_file_by_id ddsc/sdk/tests/test_client.py::TestDDSConnection::test_get_file_download ddsc/sdk/tests/test_client.py::TestDDSConnection::test_get_folder_by_id ddsc/sdk/tests/test_client.py::TestDDSConnection::test_get_folder_children ddsc/sdk/tests/test_client.py::TestDDSConnection::test_get_project_by_id ddsc/sdk/tests/test_client.py::TestDDSConnection::test_get_project_children ddsc/sdk/tests/test_client.py::TestDDSConnection::test_get_projects ddsc/sdk/tests/test_client.py::TestDDSConnection::test_move_file ddsc/sdk/tests/test_client.py::TestDDSConnection::test_move_folder ddsc/sdk/tests/test_client.py::TestDDSConnection::test_rename_file ddsc/sdk/tests/test_client.py::TestDDSConnection::test_rename_folder ddsc/sdk/tests/test_client.py::TestDDSConnection::test_upload_file ddsc/sdk/tests/test_client.py::TestBaseResponseItem::test_get_attr ddsc/sdk/tests/test_client.py::TestProject::test_create_folder ddsc/sdk/tests/test_client.py::TestProject::test_delete ddsc/sdk/tests/test_client.py::TestProject::test_get_child_for_path ddsc/sdk/tests/test_client.py::TestProject::test_get_children ddsc/sdk/tests/test_client.py::TestProject::test_move_file_or_folder ddsc/sdk/tests/test_client.py::TestProject::test_try_get_item_for_path__child_not_found ddsc/sdk/tests/test_client.py::TestProject::test_try_get_item_for_path__with_child ddsc/sdk/tests/test_client.py::TestProject::test_try_get_item_for_path__with_project ddsc/sdk/tests/test_client.py::TestProject::test_upload_file ddsc/sdk/tests/test_client.py::TestFolder::test_change_parent ddsc/sdk/tests/test_client.py::TestFolder::test_create_folder ddsc/sdk/tests/test_client.py::TestFolder::test_get_children ddsc/sdk/tests/test_client.py::TestFolder::test_rename ddsc/sdk/tests/test_client.py::TestFolder::test_upload_file ddsc/sdk/tests/test_client.py::TestFile::test_change_parent ddsc/sdk/tests/test_client.py::TestFile::test_delete ddsc/sdk/tests/test_client.py::TestFile::test_download_to_path ddsc/sdk/tests/test_client.py::TestFile::test_rename ddsc/sdk/tests/test_client.py::TestFile::test_upload_new_version ddsc/sdk/tests/test_client.py::TestFileDownload::test_save_to_path ddsc/sdk/tests/test_client.py::TestFileUpload::test_run_create_folder_new_file ddsc/sdk/tests/test_client.py::TestFileUpload::test_run_existing_file_no_parent_folder ddsc/sdk/tests/test_client.py::TestChildFinder::test_child_not_found ddsc/sdk/tests/test_client.py::TestChildFinder::test_direct_children ddsc/sdk/tests/test_client.py::TestChildFinder::test_grand_children ddsc/sdk/tests/test_client.py::TestPathToFiles::test_path_creation ddsc/sdk/tests/test_dukeds.py::TestDukeDS::test_can_deliver_to_user_with_email ddsc/sdk/tests/test_dukeds.py::TestDukeDS::test_can_deliver_to_user_with_email_with_logging_func ddsc/sdk/tests/test_dukeds.py::TestDukeDS::test_can_deliver_to_user_with_username ddsc/sdk/tests/test_dukeds.py::TestDukeDS::test_can_deliver_to_user_with_username_with_logging_func ddsc/sdk/tests/test_dukeds.py::TestDukeDS::test_create_project ddsc/sdk/tests/test_dukeds.py::TestDukeDS::test_create_project_raises_for_duplicate_project_name ddsc/sdk/tests/test_dukeds.py::TestDukeDS::test_delete_file ddsc/sdk/tests/test_dukeds.py::TestDukeDS::test_delete_project ddsc/sdk/tests/test_dukeds.py::TestDukeDS::test_delete_project_not_found ddsc/sdk/tests/test_dukeds.py::TestDukeDS::test_download_file ddsc/sdk/tests/test_dukeds.py::TestDukeDS::test_list_files ddsc/sdk/tests/test_dukeds.py::TestDukeDS::test_list_projects ddsc/sdk/tests/test_dukeds.py::TestDukeDS::test_move_file_or_folder ddsc/sdk/tests/test_dukeds.py::TestDukeDS::test_upload_file ddsc/sdk/tests/test_dukeds.py::TestDukeDS::test_upload_file_creating_project_and_parent_dir ddsc/sdk/tests/test_dukeds.py::TestDukeDS::test_upload_file_default_dest_is_local_basename ddsc/sdk/tests/test_dukeds.py::TestDukeDS::test_upload_file_makes_new_version ddsc/sdk/tests/test_dukeds.py::TestSession::test_constructor_passing_config
ddsc/sdk/dukeds.py ddsc/sdk/client.py
ddsc/sdk/dukeds.py ddsc/sdk/client.py