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

Fix missing pykeepass.kdbx_parsing when built with modern tools #378

Merged
merged 1 commit into from
Mar 11, 2024

Conversation

musicinmybrain
Copy link
Contributor

Before:

$ python3 -m build
$  tar -tzf dist/pykeepass-4.0.7.tar.gz 
pykeepass-4.0.7/
pykeepass-4.0.7/LICENSE
pykeepass-4.0.7/MANIFEST.in
pykeepass-4.0.7/PKG-INFO
pykeepass-4.0.7/README.rst
pykeepass-4.0.7/pykeepass/
pykeepass-4.0.7/pykeepass/__init__.py
pykeepass-4.0.7/pykeepass/attachment.py
pykeepass-4.0.7/pykeepass/baseelement.py
pykeepass-4.0.7/pykeepass/blank_database.kdbx
pykeepass-4.0.7/pykeepass/deprecated.py
pykeepass-4.0.7/pykeepass/entry.py
pykeepass-4.0.7/pykeepass/exceptions.py
pykeepass-4.0.7/pykeepass/group.py
pykeepass-4.0.7/pykeepass/icons.py
pykeepass-4.0.7/pykeepass/pykeepass.py
pykeepass-4.0.7/pykeepass/version.py
pykeepass-4.0.7/pykeepass/xpath.py
pykeepass-4.0.7/pykeepass.egg-info/
pykeepass-4.0.7/pykeepass.egg-info/PKG-INFO
pykeepass-4.0.7/pykeepass.egg-info/SOURCES.txt
pykeepass-4.0.7/pykeepass.egg-info/dependency_links.txt
pykeepass-4.0.7/pykeepass.egg-info/requires.txt
pykeepass-4.0.7/pykeepass.egg-info/top_level.txt
pykeepass-4.0.7/pyproject.toml
pykeepass-4.0.7/setup.cfg
$ cd dist
$ python3 -m wheel unpack pykeepass-4.0.7-py3-none-any.whl 
Unpacking to: pykeepass-4.0.7...OK
$ find pykeepass-4.0.7/
pykeepass-4.0.7/
pykeepass-4.0.7/pykeepass
pykeepass-4.0.7/pykeepass/__init__.py
pykeepass-4.0.7/pykeepass/attachment.py
pykeepass-4.0.7/pykeepass/baseelement.py
pykeepass-4.0.7/pykeepass/blank_database.kdbx
pykeepass-4.0.7/pykeepass/deprecated.py
pykeepass-4.0.7/pykeepass/entry.py
pykeepass-4.0.7/pykeepass/exceptions.py
pykeepass-4.0.7/pykeepass/group.py
pykeepass-4.0.7/pykeepass/icons.py
pykeepass-4.0.7/pykeepass/pykeepass.py
pykeepass-4.0.7/pykeepass/version.py
pykeepass-4.0.7/pykeepass/xpath.py
pykeepass-4.0.7/pykeepass-4.0.7.dist-info
pykeepass-4.0.7/pykeepass-4.0.7.dist-info/LICENSE
pykeepass-4.0.7/pykeepass-4.0.7.dist-info/METADATA
pykeepass-4.0.7/pykeepass-4.0.7.dist-info/WHEEL
pykeepass-4.0.7/pykeepass-4.0.7.dist-info/top_level.txt
pykeepass-4.0.7/pykeepass-4.0.7.dist-info/RECORD

After:


$ python3 -m build
$  tar -tzf dist/pykeepass-4.0.7.tar.gz 
pykeepass-4.0.7/
pykeepass-4.0.7/LICENSE
pykeepass-4.0.7/MANIFEST.in
pykeepass-4.0.7/PKG-INFO
pykeepass-4.0.7/README.rst
pykeepass-4.0.7/pykeepass/
pykeepass-4.0.7/pykeepass/__init__.py
pykeepass-4.0.7/pykeepass/attachment.py
pykeepass-4.0.7/pykeepass/baseelement.py
pykeepass-4.0.7/pykeepass/blank_database.kdbx
pykeepass-4.0.7/pykeepass/deprecated.py
pykeepass-4.0.7/pykeepass/entry.py
pykeepass-4.0.7/pykeepass/exceptions.py
pykeepass-4.0.7/pykeepass/group.py
pykeepass-4.0.7/pykeepass/icons.py
pykeepass-4.0.7/pykeepass/kdbx_parsing/
pykeepass-4.0.7/pykeepass/kdbx_parsing/__init__.py
pykeepass-4.0.7/pykeepass/kdbx_parsing/common.py
pykeepass-4.0.7/pykeepass/kdbx_parsing/kdbx.py
pykeepass-4.0.7/pykeepass/kdbx_parsing/kdbx3.py
pykeepass-4.0.7/pykeepass/kdbx_parsing/kdbx4.py
pykeepass-4.0.7/pykeepass/kdbx_parsing/pytwofish.py
pykeepass-4.0.7/pykeepass/kdbx_parsing/twofish.py
pykeepass-4.0.7/pykeepass/pykeepass.py
pykeepass-4.0.7/pykeepass/version.py
pykeepass-4.0.7/pykeepass/xpath.py
pykeepass-4.0.7/pykeepass.egg-info/
pykeepass-4.0.7/pykeepass.egg-info/PKG-INFO
pykeepass-4.0.7/pykeepass.egg-info/SOURCES.txt
pykeepass-4.0.7/pykeepass.egg-info/dependency_links.txt
pykeepass-4.0.7/pykeepass.egg-info/requires.txt
pykeepass-4.0.7/pykeepass.egg-info/top_level.txt
pykeepass-4.0.7/pyproject.toml
pykeepass-4.0.7/setup.cfg
$ cd dist
$ python3 -m wheel unpack pykeepass-4.0.7-py3-none-any.whl 
Unpacking to: pykeepass-4.0.7...OK
$ find pykeepass-4.0.7/
pykeepass-4.0.7/
pykeepass-4.0.7/pykeepass
pykeepass-4.0.7/pykeepass/__init__.py
pykeepass-4.0.7/pykeepass/attachment.py
pykeepass-4.0.7/pykeepass/baseelement.py
pykeepass-4.0.7/pykeepass/blank_database.kdbx
pykeepass-4.0.7/pykeepass/deprecated.py
pykeepass-4.0.7/pykeepass/entry.py
pykeepass-4.0.7/pykeepass/exceptions.py
pykeepass-4.0.7/pykeepass/group.py
pykeepass-4.0.7/pykeepass/icons.py
pykeepass-4.0.7/pykeepass/pykeepass.py
pykeepass-4.0.7/pykeepass/version.py
pykeepass-4.0.7/pykeepass/xpath.py
pykeepass-4.0.7/pykeepass/kdbx_parsing
pykeepass-4.0.7/pykeepass/kdbx_parsing/__init__.py
pykeepass-4.0.7/pykeepass/kdbx_parsing/common.py
pykeepass-4.0.7/pykeepass/kdbx_parsing/kdbx.py
pykeepass-4.0.7/pykeepass/kdbx_parsing/kdbx3.py
pykeepass-4.0.7/pykeepass/kdbx_parsing/kdbx4.py
pykeepass-4.0.7/pykeepass/kdbx_parsing/pytwofish.py
pykeepass-4.0.7/pykeepass/kdbx_parsing/twofish.py
pykeepass-4.0.7/pykeepass-4.0.7.dist-info
pykeepass-4.0.7/pykeepass-4.0.7.dist-info/LICENSE
pykeepass-4.0.7/pykeepass-4.0.7.dist-info/METADATA
pykeepass-4.0.7/pykeepass-4.0.7.dist-info/WHEEL
pykeepass-4.0.7/pykeepass-4.0.7.dist-info/top_level.txt
pykeepass-4.0.7/pykeepass-4.0.7.dist-info/RECORD

If you would rather not explicitly list all (sub)packages like this, see https://setuptools.pypa.io/en/latest/userguide/package_discovery.html#finding-simple-packages (but make sure you don’t accidentally install tests/ directly into site-packages, a common pitfall).

@Evidlo
Copy link
Member

Evidlo commented Feb 29, 2024

I'm not seeing this behavior (setuptools 69.0.3):

[evan@blackbox pykeepass] rm -f dist/pykeepass-4.0.*

[evan@blackbox pykeepass] python -m build
* Creating venv isolated environment...
* Installing packages in isolated environment... (setuptools>=59.0.0)
* Getting build dependencies for sdist...
running egg_info
writing pykeepass.egg-info/PKG-INFO
writing dependency_links to pykeepass.egg-info/dependency_links.txt
writing requirements to pykeepass.egg-info/requires.txt
writing top-level names to pykeepass.egg-info/top_level.txt
reading manifest file 'pykeepass.egg-info/SOURCES.txt'
reading manifest template 'MANIFEST.in'
warning: no previously-included files matching '__pycache__' found under directory '*'
warning: no previously-included files matching '*.pyc' found under directory '*'
running install_egg_info
...
Copying pykeepass.egg-info to build/bdist.linux-x86_64/wheel/pykeepass-4.0.7-py3.11.egg-info
running install_scripts
creating build/bdist.linux-x86_64/wheel/pykeepass-4.0.7.dist-info/WHEEL
creating '/home/evan/resources/pykeepass/dist/.tmp-uq3db6d4/pykeepass-4.0.7-py3-none-any.whl' and adding 'build/bdist.linux-x86_64/wheel' to it
adding 'pykeepass/__init__.py'
adding 'pykeepass/attachment.py'
adding 'pykeepass/baseelement.py'
adding 'pykeepass/blank_database.kdbx'
adding 'pykeepass/deprecated.py'
adding 'pykeepass/entry.py'
adding 'pykeepass/exceptions.py'
adding 'pykeepass/group.py'
adding 'pykeepass/icons.py'
adding 'pykeepass/pykeepass.py'
adding 'pykeepass/setters.py'
adding 'pykeepass/version.py'
adding 'pykeepass/xpath.py'
adding 'pykeepass/kdbx_parsing/__init__.py'
adding 'pykeepass/kdbx_parsing/common.py'
adding 'pykeepass/kdbx_parsing/kdbx.py'
adding 'pykeepass/kdbx_parsing/kdbx3.py'
adding 'pykeepass/kdbx_parsing/kdbx4.py'
adding 'pykeepass/kdbx_parsing/pytwofish.py'
adding 'pykeepass/kdbx_parsing/twofish.py'
adding 'pykeepass-4.0.7.dist-info/LICENSE'
adding 'pykeepass-4.0.7.dist-info/METADATA'
adding 'pykeepass-4.0.7.dist-info/WHEEL'
adding 'pykeepass-4.0.7.dist-info/top_level.txt'
adding 'pykeepass-4.0.7.dist-info/RECORD'
removing build/bdist.linux-x86_64/wheel
Successfully built pykeepass-4.0.7.tar.gz and pykeepass-4.0.7-py3-none-any.whl

[evan@blackbox pykeepass] tar -tzf dist/pykeepass-4.0.7.tar.gz 
pykeepass-4.0.7/
pykeepass-4.0.7/.github/
pykeepass-4.0.7/.github/dependabot.yml
pykeepass-4.0.7/.github/workflows/
pykeepass-4.0.7/.github/workflows/ci.yaml
pykeepass-4.0.7/.gitignore
pykeepass-4.0.7/CHANGELOG.rst
pykeepass-4.0.7/LICENSE
pykeepass-4.0.7/MANIFEST.in
pykeepass-4.0.7/Makefile
pykeepass-4.0.7/PKG-INFO
pykeepass-4.0.7/README.rst
pykeepass-4.0.7/pykeepass/
pykeepass-4.0.7/pykeepass/__init__.py
pykeepass-4.0.7/pykeepass/attachment.py
pykeepass-4.0.7/pykeepass/baseelement.py
pykeepass-4.0.7/pykeepass/blank_database.kdbx
pykeepass-4.0.7/pykeepass/deprecated.py
pykeepass-4.0.7/pykeepass/entry.py
pykeepass-4.0.7/pykeepass/exceptions.py
pykeepass-4.0.7/pykeepass/group.py
pykeepass-4.0.7/pykeepass/icons.py
pykeepass-4.0.7/pykeepass/kdbx_parsing/
pykeepass-4.0.7/pykeepass/kdbx_parsing/__init__.py
pykeepass-4.0.7/pykeepass/kdbx_parsing/common.py
pykeepass-4.0.7/pykeepass/kdbx_parsing/kdbx.py
pykeepass-4.0.7/pykeepass/kdbx_parsing/kdbx3.py
pykeepass-4.0.7/pykeepass/kdbx_parsing/kdbx4.py
pykeepass-4.0.7/pykeepass/kdbx_parsing/pytwofish.py
pykeepass-4.0.7/pykeepass/kdbx_parsing/twofish.py
pykeepass-4.0.7/pykeepass/pykeepass.py
pykeepass-4.0.7/pykeepass/setters.py
pykeepass-4.0.7/pykeepass/version.py
pykeepass-4.0.7/pykeepass/xpath.py
pykeepass-4.0.7/pykeepass.egg-info/
pykeepass-4.0.7/pykeepass.egg-info/PKG-INFO
pykeepass-4.0.7/pykeepass.egg-info/SOURCES.txt
pykeepass-4.0.7/pykeepass.egg-info/dependency_links.txt
pykeepass-4.0.7/pykeepass.egg-info/requires.txt
pykeepass-4.0.7/pykeepass.egg-info/top_level.txt
pykeepass-4.0.7/pyproject.toml
pykeepass-4.0.7/requirements.txt
pykeepass-4.0.7/setup.cfg

[evan@blackbox pykeepass] python3 -m wheel unpack dist/pykeepass-4.0.7-py3-none-any.whl 
Unpacking to: pykeepass-4.0.7...OK

[evan@blackbox pykeepass] tree pykeepass-4.0.7/pykeepass
pykeepass-4.0.7/pykeepass
├── attachment.py
├── baseelement.py
├── blank_database.kdbx
├── deprecated.py
├── entry.py
├── exceptions.py
├── group.py
├── icons.py
├── __init__.py
├── kdbx_parsing
│   ├── common.py
│   ├── __init__.py
│   ├── kdbx3.py
│   ├── kdbx4.py
│   ├── kdbx.py
│   ├── pytwofish.py
│   └── twofish.py
├── pykeepass.py
├── setters.py
├── version.py
└── xpath.py

@musicinmybrain
Copy link
Contributor Author

That’s really strange. I’m on Fedora Linux 39, and I discovered the problem because the pykeepass/kdbx_parsing directory was absent when I built python-pykeepass 4.0.7 for Fedora Rawhide. I tried installing the same version of setuptools in a virtualenv, but that didn’t make any difference.

@musicinmybrain
Copy link
Contributor Author

I have tried everything I can think of, and I can’t find any way to reproduce what you are seeing. Would you mind telling me what OS you are using, so I can perhaps try it in a virtual machine and maybe figure out what the difference is?

@Evidlo
Copy link
Member

Evidlo commented Mar 1, 2024

Sure, I'm on Debian 12 with Python 3.11.7

@musicinmybrain
Copy link
Contributor Author

OK, I installed a VM with basically-default setup choices using https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/debian-12.5.0-amd64-netinst.iso. I left Software Selection at defaults (Debian desktop environment, GNOME, standard system utilities). Then, on that clean system, I did:

$ sudo apt install git python3-{build,venv}
$ git clone https://github.com/libkeepass/pykeepass.git
$ cd pykeepass
$ python3 -m build

The result is the same as I originally reported (wheel does not contain pykeepass/kdbx_parsing/).

Is there any possibility that you tested this after checking out the branch corresponding to this PR to investigate, rather than using master? I am not sure how else to explain the discrepancy.

@mboquien
Copy link

mboquien commented Mar 9, 2024

For what it is worth, Archlinux also appear to be affected: https://archlinux.org/packages/extra/any/python-pykeepass/ ( click on “View the file list for python-pykeepass”). Their packaging script can be seen at https://gitlab.archlinux.org/archlinux/packaging/packages/python-pykeepass/-/blob/main/PKGBUILD?ref_type=heads .

@Evidlo Evidlo merged commit 4c8a1cc into libkeepass:master Mar 11, 2024
5 of 6 checks passed
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.

3 participants