setup.py modifies source files during installation #18

Open
opened 2025-11-15 03:44:19 +00:00 by snegov · 0 comments
Owner

setup.py modifies source files during installation

Priority: Medium
Component: setup.py
Type: Bug

Description

The setup.py file writes to curateipsum/_version.py during installation, which violates the principle of not modifying source during installation and can cause issues with package managers.

Location

setup.py:5-13

Current Code

def get_version_from_vcs():
    ret_code, git_ver = subprocess.getstatusoutput("git describe")
    if ret_code != 0:
        from curateipsum._version import version
        return version

    with open("curateipsum/_version.py", "w") as fd:
        fd.write("version = \"%s\"\n" % git_ver)
        return git_ver

Problems

  1. Modifies source tree during installation
  2. Requires write access to source directory
  3. Won't work with read-only installations
  4. Causes issues with editable installs
  5. Version changes aren't tracked in git

Proposed Solution

Use setuptools_scm package:

# setup.py
setuptools.setup(
    name="cura-te-ipsum",
    use_scm_version={
        "write_to": "curateipsum/_version.py",
    },
    setup_requires=['setuptools_scm'],
    ...
)

Or use importlib.metadata for Python 3.8+:

# __init__.py
try:
    from importlib.metadata import version
    __version__ = version("cura-te-ipsum")
except ImportError:
    __version__ = "unknown"

Impact

Medium - Can cause installation issues in some environments.

# setup.py modifies source files during installation **Priority:** Medium **Component:** setup.py **Type:** Bug ## Description The `setup.py` file writes to `curateipsum/_version.py` during installation, which violates the principle of not modifying source during installation and can cause issues with package managers. ## Location `setup.py:5-13` ## Current Code ```python def get_version_from_vcs(): ret_code, git_ver = subprocess.getstatusoutput("git describe") if ret_code != 0: from curateipsum._version import version return version with open("curateipsum/_version.py", "w") as fd: fd.write("version = \"%s\"\n" % git_ver) return git_ver ``` ## Problems 1. Modifies source tree during installation 2. Requires write access to source directory 3. Won't work with read-only installations 4. Causes issues with editable installs 5. Version changes aren't tracked in git ## Proposed Solution Use `setuptools_scm` package: ```python # setup.py setuptools.setup( name="cura-te-ipsum", use_scm_version={ "write_to": "curateipsum/_version.py", }, setup_requires=['setuptools_scm'], ... ) ``` Or use `importlib.metadata` for Python 3.8+: ```python # __init__.py try: from importlib.metadata import version __version__ = version("cura-te-ipsum") except ImportError: __version__ = "unknown" ``` ## Impact **Medium** - Can cause installation issues in some environments.
Sign in to join this conversation.
No Label
No Milestone
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: snegov/cura-te-ipsum#18
No description provided.