Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

⛔ Remove pypiwin32 package #1056

Merged
merged 1 commit into from
Dec 21, 2023
Merged

⛔ Remove pypiwin32 package #1056

merged 1 commit into from
Dec 21, 2023

Conversation

SimmonsRitchie
Copy link
Contributor

@SimmonsRitchie SimmonsRitchie commented Dec 18, 2023

Summary

Deletes pypiwin32 from our pipfile and rebuilds our lock file, which appears to solve an issue with our dependencies that was causing our CI github workflow to fail when triggered.

Why are we doing this?

I recently opened a PR (my first for this repo) with relatively small changes and immediately discovered our CI github action was failing. The failure appeared totally unrelated to my changes. The error was occurring just as Pipenv attempted to install packages:

Successfully created virtual environment!
Virtualenv location: /home/runner/work/city-scrapers/city-scrapers/.venv
Installing dependencies from Pipfile.lock (172d69)...
[pipenv.exceptions.InstallError]: Collecting city-scrapers-core[azure]@ git+https://github.com/City-Bureau/city-scrapers-core.git@44ed57f1f4833f7c35276fff4bc5187e191da496 (from -r /tmp/pipenv-lnfh2pbt-requirements/pipenv-eloxw8jh-reqs.txt (line 1))
[pipenv.exceptions.InstallError]:   Cloning https://github.com/City-Bureau/city-scrapers-core.git (to revision 44ed57f1f4833f7c35276fff4bc5187e191da496) to /tmp/pip-install-rcissozi/city-scrapers-core_ee08d0b22bfb453b832816251185d8a1
[pipenv.exceptions.InstallError]:   Resolved https://github.com/City-Bureau/city-scrapers-core.git to commit 44ed57f1f4833f7c35276fff4bc5187e191da496
[pipenv.exceptions.InstallError]:   Installing build dependencies: started
[pipenv.exceptions.InstallError]:   Installing build dependencies: finished with status 'done'
[pipenv.exceptions.InstallError]:   Getting requirements to build wheel: started
[pipenv.exceptions.InstallError]:   Getting requirements to build wheel: finished with status 'done'
[pipenv.exceptions.InstallError]:   Preparing metadata (pyproject.toml): started
[pipenv.exceptions.InstallError]:   Preparing metadata (pyproject.toml): finished with status 'done'
[pipenv.exceptions.InstallError]: Collecting scrapy-sentry@ git+https://github.com/City-Bureau/scrapy-sentry.git@5da919f716d981e5c7926994f27676a285da39a3 (from -r /tmp/pipenv-lnfh2pbt-requirements/pipenv-eloxw8jh-reqs.txt (line 2))
[pipenv.exceptions.InstallError]:   Cloning https://github.com/City-Bureau/scrapy-sentry.git (to revision 5da919f716d981e5c7926994f27676a285da39a3) to /tmp/pip-install-rcissozi/scrapy-sentry_a286197c230d454db756ec714217ab69
[pipenv.exceptions.InstallError]:   Resolved https://github.com/City-Bureau/scrapy-sentry.git to commit 5da919f716d981e5c7926994f27676a285da39a3
[pipenv.exceptions.InstallError]:   Preparing metadata (setup.py): started
[pipenv.exceptions.InstallError]:   Preparing metadata (setup.py): finished with status 'error'
[pipenv.exceptions.InstallError]: Running command git clone --filter=blob:none --quiet https://github.com/City-Bureau/city-scrapers-core.git /tmp/pip-install-rcissozi/city-scrapers-core_ee08d0b22bfb453b832816251185d8a1
[pipenv.exceptions.InstallError]:   Running command git rev-parse -q --verify 'sha^44ed57f1f4833f7c35276fff4bc5187e191da496'
[pipenv.exceptions.InstallError]:   Running command git fetch -q https://github.com/City-Bureau/city-scrapers-core.git 44ed57f1f4833f7c35276fff4bc5187e191da496
[pipenv.exceptions.InstallError]:   Running command git clone --filter=blob:none --quiet https://github.com/City-Bureau/scrapy-sentry.git /tmp/pip-install-rcissozi/scrapy-sentry_a286197c230d454db756ec714217ab69
[pipenv.exceptions.InstallError]:   Running command git rev-parse -q --verify 'sha^5da919f716d981e5c7926994f27676a285da39a3'
[pipenv.exceptions.InstallError]:   Running command git fetch -q https://github.com/City-Bureau/scrapy-sentry.git 5da919f716d981e5c7926994f27676a285da39a3
[pipenv.exceptions.InstallError]:   Running command git checkout -q 5da919f716d981e5c7926994f27676a285da39a3
[pipenv.exceptions.InstallError]:   error: subprocess-exited-with-error
[pipenv.exceptions.InstallError]:   
[pipenv.exceptions.InstallError]:   × python setup.py egg_info did not run successfully.
[pipenv.exceptions.InstallError]:   │ exit code: 1
[pipenv.exceptions.InstallError]:   ╰─> [30 lines of output]
[pipenv.exceptions.InstallError]:       /home/runner/work/city-scrapers/city-scrapers/.venv/lib/python3.9/site-packages/setuptools/__init__.py:80: _DeprecatedInstaller: setuptools.installer and fetch_build_eggs are deprecated.
[pipenv.exceptions.InstallError]:       !!
[pipenv.exceptions.InstallError]:       
[pipenv.exceptions.InstallError]:               ********************************************************************************
[pipenv.exceptions.InstallError]:               Requirements should be satisfied by a PEP 517 installer.
[pipenv.exceptions.InstallError]:               If you are using pip, you can try `pip install --use-pep517`.
[pipenv.exceptions.InstallError]:               ********************************************************************************
[pipenv.exceptions.InstallError]:       
[pipenv.exceptions.InstallError]:       !!
[pipenv.exceptions.InstallError]:       Traceback (most recent call last):
[pipenv.exceptions.InstallError]:         File "<string>", line 2, in <module>
[pipenv.exceptions.InstallError]:         File "<pip-setuptools-caller>", line 34, in <module>
[pipenv.exceptions.InstallError]:         File "/tmp/pip-install-rcissozi/scrapy-sentry_a286197c230d454db756ec714217ab69/setup.py", line 3, in <module>
[pipenv.exceptions.InstallError]:           setup(
[pipenv.exceptions.InstallError]:         File "/home/runner/work/city-scrapers/city-scrapers/.venv/lib/python3.9/site-packages/setuptools/__init__.py", line 102, in setup
[pipenv.exceptions.InstallError]:         File "/home/runner/work/city-scrapers/city-scrapers/.venv/lib/python3.9/site-packages/setuptools/__init__.py", line 75, in _install_setup_requires
[pipenv.exceptions.InstallError]:         File "/home/runner/work/city-scrapers/city-scrapers/.venv/lib/python3.9/site-packages/setuptools/__init__.py", line 80, in _fetch_build_eggs
[pipenv.exceptions.InstallError]:         File "/home/runner/work/city-scrapers/city-scrapers/.venv/lib/python3.9/site-packages/setuptools/dist.py", line 636, in fetch_build_eggs
[pipenv.exceptions.InstallError]:         File "/home/runner/work/city-scrapers/city-scrapers/.venv/lib/python3.9/site-packages/setuptools/installer.py", line 38, in _fetch_build_eggs
[pipenv.exceptions.InstallError]:         File "/home/runner/work/city-scrapers/city-scrapers/.venv/lib/python3.9/site-packages/pkg_resources/__init__.py", line 829, in resolve
[pipenv.exceptions.InstallError]:           dist = self._resolve_dist(
[pipenv.exceptions.InstallError]:         File "/home/runner/work/city-scrapers/city-scrapers/.venv/lib/python3.9/site-packages/pkg_resources/__init__.py", line 865, in _resolve_dist
[pipenv.exceptions.InstallError]:           dist = best[req.key] = env.best_match(
[pipenv.exceptions.InstallError]:         File "/home/runner/work/city-scrapers/city-scrapers/.venv/lib/python3.9/site-packages/pkg_resources/__init__.py", line 1135, in best_match
[pipenv.exceptions.InstallError]:           return self.obtain(req, installer)
[pipenv.exceptions.InstallError]:         File "/home/runner/work/city-scrapers/city-scrapers/.venv/lib/python3.9/site-packages/pkg_resources/__init__.py", line 1147, in obtain
[pipenv.exceptions.InstallError]:           return installer(requirement)
[pipenv.exceptions.InstallError]:         File "/home/runner/work/city-scrapers/city-scrapers/.venv/lib/python3.9/site-packages/setuptools/installer.py", line 74, in _fetch_build_egg_no_warn
[pipenv.exceptions.InstallError]:         File "/home/runner/work/city-scrapers/city-scrapers/.venv/lib/python3.9/site-packages/setuptools/dist.py", line 677, in get_egg_cache_dir
[pipenv.exceptions.InstallError]:       ImportError: cannot import name 'windows_support' from 'setuptools' (/home/runner/work/city-scrapers/city-scrapers/.venv/lib/python3.9/site-packages/setuptools/__init__.py)
[pipenv.exceptions.InstallError]:       [end of output]
[pipenv.exceptions.InstallError]:   
[pipenv.exceptions.InstallError]:   note: This error originates from a subprocess, and is likely not a problem with pip.
[pipenv.exceptions.InstallError]: error: metadata-generation-failed
[pipenv.exceptions.InstallError]: 
[pipenv.exceptions.InstallError]: × Encountered error while generating package metadata.
[pipenv.exceptions.InstallError]: ╰─> See above for output.
[pipenv.exceptions.InstallError]: 
[pipenv.exceptions.InstallError]: note: This is an issue with the package mentioned above, not pip.
[pipenv.exceptions.InstallError]: hint: See above for details.
ERROR: Couldn't install package: {}
 Package installation failed...
Error: Process completed with exit code 1.

In both python 3.8 and 3.9 virtual environments, I attempted to rebuild our Pipfile.lock file to address this issue but encountered a different but, I suspect, related error:

daniel@Mac city-scrapers % pipenv lock
Locking [packages] dependencies...
Building requirements...
Resolving dependencies...
✘ Locking Failed!
⠏ Locking...False
INFO:pip.subprocessor:Running command git clone --filter=blob:none --quiet https://github.com/City-Bureau/city-scrapers-core.git /private/var/folders/m8/mqmgqnqs4czc6pwmwjs4_y7r0000gp/T/pip-temp-egt2b2mu/city-scrapers-core_7a491187081642a19b707b8967de7a75
INFO:pip.subprocessor:Running command git clone --filter=blob:none --quiet https://github.com/City-Bureau/scrapy-sentry.git /private/var/folders/m8/mqmgqnqs4czc6pwmwjs4_y7r0000gp/T/pip-temp-egt2b2mu/scrapy-sentry_fcc7192d0f854031b733714b4b589017
INFO:pip.subprocessor:Running command git checkout -q 5da919f716d981e5c7926994f27676a285da39a3
ERROR:pip.subprocessor:python setup.py egg_info exited with 1
[ResolutionFailure]:   File "/Users/daniel/.local/lib/python3.8/site-packages/pipenv/resolver.py", line 645, in _main
[ResolutionFailure]:       resolve_packages(
[ResolutionFailure]:   File "/Users/daniel/.local/lib/python3.8/site-packages/pipenv/resolver.py", line 612, in resolve_packages
[ResolutionFailure]:       results, resolver = resolve(
[ResolutionFailure]:   File "/Users/daniel/.local/lib/python3.8/site-packages/pipenv/resolver.py", line 592, in resolve
[ResolutionFailure]:       return resolve_deps(
[ResolutionFailure]:   File "/Users/daniel/.local/lib/python3.8/site-packages/pipenv/utils/resolver.py", line 908, in resolve_deps
[ResolutionFailure]:       results, hashes, internal_resolver = actually_resolve_deps(
[ResolutionFailure]:   File "/Users/daniel/.local/lib/python3.8/site-packages/pipenv/utils/resolver.py", line 681, in actually_resolve_deps
[ResolutionFailure]:       resolver.resolve()
[ResolutionFailure]:   File "/Users/daniel/.local/lib/python3.8/site-packages/pipenv/utils/resolver.py", line 442, in resolve
[ResolutionFailure]:       raise ResolutionFailure(message=str(e))
[pipenv.exceptions.ResolutionFailure]: Warning: Your dependencies could not be resolved. You likely have a mismatch in your sub-dependencies.
  You can use $ pipenv run pip install <requirement_name> to bypass this mechanism, then run $ pipenv graph to inspect the versions actually installed in the virtualenv.
  Hint: try $ pipenv lock --pre if it is a pre-release dependency.
ERROR: metadata generation failed

Traceback (most recent call last):
  File "/Users/daniel/.local/bin/pipenv", line 8, in <module>
    sys.exit(cli())
  File "/Users/daniel/.local/lib/python3.8/site-packages/pipenv/vendor/click/core.py", line 1157, in __call__
    return self.main(*args, **kwargs)
  File "/Users/daniel/.local/lib/python3.8/site-packages/pipenv/cli/options.py", line 58, in main
    return super().main(*args, **kwargs, windows_expand_args=False)
  File "/Users/daniel/.local/lib/python3.8/site-packages/pipenv/vendor/click/core.py", line 1078, in main
    rv = self.invoke(ctx)
  File "/Users/daniel/.local/lib/python3.8/site-packages/pipenv/vendor/click/core.py", line 1688, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/Users/daniel/.local/lib/python3.8/site-packages/pipenv/vendor/click/core.py", line 1434, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/Users/daniel/.local/lib/python3.8/site-packages/pipenv/vendor/click/core.py", line 783, in invoke
    return __callback(*args, **kwargs)
  File "/Users/daniel/.local/lib/python3.8/site-packages/pipenv/vendor/click/decorators.py", line 92, in new_func
    return ctx.invoke(f, obj, *args, **kwargs)
  File "/Users/daniel/.local/lib/python3.8/site-packages/pipenv/vendor/click/core.py", line 783, in invoke
    return __callback(*args, **kwargs)
  File "/Users/daniel/.local/lib/python3.8/site-packages/pipenv/vendor/click/decorators.py", line 33, in new_func
    return f(get_current_context(), *args, **kwargs)
  File "/Users/daniel/.local/lib/python3.8/site-packages/pipenv/cli/command.py", line 340, in lock
    do_lock(
  File "/Users/daniel/.local/lib/python3.8/site-packages/pipenv/routines/lock.py", line 65, in do_lock
    venv_resolve_deps(
  File "/Users/daniel/.local/lib/python3.8/site-packages/pipenv/utils/resolver.py", line 849, in venv_resolve_deps
    c = resolve(cmd, st, project=project)
  File "/Users/daniel/.local/lib/python3.8/site-packages/pipenv/utils/resolver.py", line 718, in resolve
    raise RuntimeError("Failed to lock Pipfile.lock!")
RuntimeError: Failed to lock Pipfile.lock!

I tried installing our production dependencies from scratch, one by one, and found that removing pypiwin32 meant I could rebuild our Pipfile.lock successfully. Our CI workflow also could install our dependencies successfully and run normally.

pypiwin32 is a package used by Windows users to allow Python applications to access and use various Windows-specific features and functionalities. It was introduced in #934 in 2019, but unfortunately there are no notes to help explain the exact reason for its introduction.

My suspicion is that the package was, of course, added to provide support for Windows-using contributors of this repo or to make it more accessible to potential contributors. However, my overall impression is that pypiwin32 is now quite outdated and hasn't been maintained (it's last commit was in 2017). My sense is that a different package, pywin32, now provides the preferred Python bindings for Windows and, based on the package's readme, that users handle this as a global install on their machine rather than within their virtual environment on a project-by-project basis. For that reason, I think we can remove the pypiwin32 package and – hopefully – be confident it won't impact the ability of current or future Windows-using contributors to contribute to this repo.

How can I manually test these changes?

  1. Ensure you have Python 3.9 installed on your machine. I prefer to use pyenv for installing and switching between Python versions.
  2. Ensure you have pipenv installed on your machine.
  3. In your terminal, open the project's root folder and create a python 3.9 virtual environment using pipenv.
    pipenv --python 3.9
  4. Now, attempt to rebuild our Pipfile.lock:
    pipenv lock

The command should execute without raising any errors and the Pipfile.lock should be rebuilt.

Are there any smells or added technical debt to note?

As a Mac user, I feel a little uncomfortable removing this package without knowing the full implications for Windows-based devs but it's also unclear to me whether this package was necessarily providing any benefit to them either. My feeling is that right now the priority probably needs to be ensuring we have a functioning CI process and that we should address any complaints/feedback from Windows-users subsequent to this PR being merged.

As an aside, this issue makes me lean towards dockerizing this project to provide reliable cross-platform support. This was discussed in 2019 in #932 and is probably a conversation worth resurrecting.

@LienDang
Copy link

@SimmonsRitchie I think it's ok to remove pypiwin32 from the [packages] list in the Pipfile.
You can put it under [dev-packages] so it will only be run with pipenv sync --dev for local development environments, not in Github Actions CI environment.
Windows developers can handle the package versions later

@LienDang
Copy link

@SimmonsRitchie The Cron workflow only runs in main branch. If you create a PR from a feature branch, you can trigger the Cron workflow manually to check if it runs successfully. For example I triggered it on your branch fix-ci2 and it was successfully. So feel free to merge this PR to main.

@SimmonsRitchie
Copy link
Contributor Author

Thank you very much for the review, @LienDang! I really appreciate it.

Re: moving pypiwin32 to dev dependencies. I agree this would solve the issue in production but the problem is I think this might just effectively shuffle the problem around. On my machine atleast (macOS 14.2, python 3.9 venv), if I move the package to dev dependencies and then run pipenv lock I'll generate a similar dependency conflict error to the one I cited in my PR notes and I'll be unable to generate a new Pipfile.lock:

daniel@Dans-Macbook-Air city-scrapers % pipenv lock
Locking [packages] dependencies...
Building requirements...
Resolving dependencies...
✔ Success!
⠋ Locking...Warning: INFO:pip.subprocessor:Running command git clone --filter=blob:none --quiet https://github.com/City-Bureau/city-scrapers-core.git /private/var/folders/m8/mqmgqnqs4czc6pwmwjs4_y7r0000gp/T/pip-temp-q3lhnwz5/city-scrapers-core_99f48bb8411341348a360a2d0fdcc549
INFO:pip.subprocessor:Running command git clone --filter=blob:none --quiet https://github.com/City-Bureau/scrapy-sentry.git /private/var/folders/m8/mqmgqnqs4czc6pwmwjs4_y7r0000gp/T/pip-temp-q3lhnwz5/scrapy-sentry_634f5ffb4306425d87292ebf255d2be0
INFO:pip.subprocessor:Running command git checkout -q 5da919f716d981e5c7926994f27676a285da39a3
INFO:pip.subprocessor:Running command git clone --filter=blob:none https://github.com/City-Bureau/scrapy-sentry.git /var/folders/m8/mqmgqnqs4czc6pwmwjs4_y7r0000gp/T/tmp2gix8y91
INFO:pip.subprocessor:Cloning into '/var/folders/m8/mqmgqnqs4czc6pwmwjs4_y7r0000gp/T/tmp2gix8y91'...
INFO:pip.subprocessor:Running command git checkout -q 5da919f716d981e5c7926994f27676a285da39a3
INFO:pip.subprocessor:Running command git clone --filter=blob:none https://github.com/City-Bureau/city-scrapers-core.git /var/folders/m8/mqmgqnqs4czc6pwmwjs4_y7r0000gp/T/tmprk7xer22
INFO:pip.subprocessor:Cloning into '/var/folders/m8/mqmgqnqs4czc6pwmwjs4_y7r0000gp/T/tmprk7xer22'...
Locking [dev-packages] dependencies...
Building requirements...
Resolving dependencies...
✘ Locking Failed!
⠧ Locking...False
ERROR:pip.subprocessor:python setup.py egg_info exited with 1
[ResolutionFailure]:   File "/Users/daniel/.local/lib/python3.8/site-packages/pipenv/resolver.py", line 645, in _main
[ResolutionFailure]:       resolve_packages(
[ResolutionFailure]:   File "/Users/daniel/.local/lib/python3.8/site-packages/pipenv/resolver.py", line 612, in resolve_packages
[ResolutionFailure]:       results, resolver = resolve(
[ResolutionFailure]:   File "/Users/daniel/.local/lib/python3.8/site-packages/pipenv/resolver.py", line 592, in resolve
[ResolutionFailure]:       return resolve_deps(
[ResolutionFailure]:   File "/Users/daniel/.local/lib/python3.8/site-packages/pipenv/utils/resolver.py", line 908, in resolve_deps
[ResolutionFailure]:       results, hashes, internal_resolver = actually_resolve_deps(
[ResolutionFailure]:   File "/Users/daniel/.local/lib/python3.8/site-packages/pipenv/utils/resolver.py", line 681, in actually_resolve_deps
[ResolutionFailure]:       resolver.resolve()
[ResolutionFailure]:   File "/Users/daniel/.local/lib/python3.8/site-packages/pipenv/utils/resolver.py", line 442, in resolve
[ResolutionFailure]:       raise ResolutionFailure(message=str(e))
[pipenv.exceptions.ResolutionFailure]: Warning: Your dependencies could not be resolved. You likely have a mismatch in your sub-dependencies.
  You can use $ pipenv run pip install <requirement_name> to bypass this mechanism, then run $ pipenv graph to inspect the versions actually installed in the virtualenv.
  Hint: try $ pipenv lock --pre if it is a pre-release dependency.
ERROR: metadata generation failed

Traceback (most recent call last):
  File "/Users/daniel/.local/bin/pipenv", line 8, in <module>
    sys.exit(cli())
  File "/Users/daniel/.local/lib/python3.8/site-packages/pipenv/vendor/click/core.py", line 1157, in __call__
    return self.main(*args, **kwargs)
  File "/Users/daniel/.local/lib/python3.8/site-packages/pipenv/cli/options.py", line 58, in main
    return super().main(*args, **kwargs, windows_expand_args=False)
  File "/Users/daniel/.local/lib/python3.8/site-packages/pipenv/vendor/click/core.py", line 1078, in main
    rv = self.invoke(ctx)
  File "/Users/daniel/.local/lib/python3.8/site-packages/pipenv/vendor/click/core.py", line 1688, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/Users/daniel/.local/lib/python3.8/site-packages/pipenv/vendor/click/core.py", line 1434, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/Users/daniel/.local/lib/python3.8/site-packages/pipenv/vendor/click/core.py", line 783, in invoke
    return __callback(*args, **kwargs)
  File "/Users/daniel/.local/lib/python3.8/site-packages/pipenv/vendor/click/decorators.py", line 92, in new_func
    return ctx.invoke(f, obj, *args, **kwargs)
  File "/Users/daniel/.local/lib/python3.8/site-packages/pipenv/vendor/click/core.py", line 783, in invoke
    return __callback(*args, **kwargs)
  File "/Users/daniel/.local/lib/python3.8/site-packages/pipenv/vendor/click/decorators.py", line 33, in new_func
    return f(get_current_context(), *args, **kwargs)
  File "/Users/daniel/.local/lib/python3.8/site-packages/pipenv/cli/command.py", line 340, in lock
    do_lock(
  File "/Users/daniel/.local/lib/python3.8/site-packages/pipenv/routines/lock.py", line 65, in do_lock
    venv_resolve_deps(
  File "/Users/daniel/.local/lib/python3.8/site-packages/pipenv/utils/resolver.py", line 849, in venv_resolve_deps
    c = resolve(cmd, st, project=project)
  File "/Users/daniel/.local/lib/python3.8/site-packages/pipenv/utils/resolver.py", line 718, in resolve
    raise RuntimeError("Failed to lock Pipfile.lock!")
RuntimeError: Failed to lock Pipfile.lock!

Unless you feel strongly about it, I still lean towards just removing this package entirely to make this project easy to install for new contributors. My sense from your second comment is that you're cool with that.

@SimmonsRitchie SimmonsRitchie merged commit 2b079c4 into main Dec 21, 2023
3 checks passed
@SimmonsRitchie SimmonsRitchie deleted the fix-ci2 branch December 21, 2023 15:23
@LienDang
Copy link

@SimmonsRitchie yes, you are right about moving the lib into dev-dependencies could be tricky to new contributors. But I still wanted to leave a hint for Windows devs to know that they may need to install pypiwin32 for their machine (it's no problem to Git-experienced devs, they can trace back the change (the removal) from Git history 😀). So how about putting a note to the README, or commenting it out under the dev dependencies (there will be no hash for it in the Pipfile.lock)? Anyway I'm ok with merging this PR! It is the cleanest approach 👍

@SimmonsRitchie
Copy link
Contributor Author

I like that compromise, @LienDang! I have a forthcoming PR that makes a few tweaks to the readme. I'll include a note, re: pypiwin32.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants