Python / Debian package dependencies

S

Steven Samuel Cole

Hi all,

I am trying to build a debian package for my python modules using
stdeb and dpkg-buildpackage. The package building itself works, I also
managed to have an entry point created and I can use my python modules
on the Ubuntu virtual machine I use to test the package.

The problem is that my modules require the psycopg2 python package and
the entry point seems to require setuptools.
I can't figure out how to declare a dependency that actually results
in the dependency Debian packages being installed.
I tried adding these lines to setup.py:

requires = ['psycopg2', 'setuptools'],
requires = ['psycopg2 (>=0.1)', 'setuptools (>=0.1)'],
install_requires = ['psycopg2', 'setuptools'],
install_requires = ['psycopg2>=0.1', 'setuptools>=0.1'],

and then run stdeb_run_setup and dpkg-buildpackage -rfakeroot -uc -us
in the deb_dist/<package name> folder created, but when I copy the
..deb file over to the virtual machine and do dpkg -i <.deb file>, none
of them would actually install psycopg2 and setuptools.

What am I doing wrong ? Am I actually somewhat on the right track or
am I doing complete nonsense ?

Thanks for your help!

Cheers,

Steve
 
P

Paul Boddie

I am trying to build a debian package for my python modules using
stdeb and dpkg-buildpackage. The package building itself works, I also
managed to have an entry point created and I can use my python modules
on the Ubuntu virtual machine I use to test the package.

The problem is that my modules require the psycopg2 python package and
the entry point seems to require setuptools.

Are you saying that psycopg2 needs setuptools for the setup.py script
to work? This isn't generally the case (or wasn't), but maybe the
"entry point" is a setuptools thing which would then demand that
software's presence.
I can't figure out how to declare a dependency that actually results
in the dependency Debian packages being installed.
I tried adding these lines to setup.py:

requires = ['psycopg2', 'setuptools'],
requires = ['psycopg2 (>=0.1)', 'setuptools (>=0.1)'],
install_requires = ['psycopg2', 'setuptools'],
install_requires = ['psycopg2>=0.1', 'setuptools>=0.1'],

How does stdeb know which package provides psycopg2? I'm not really
familiar with stdeb - I write my own packaging files - but might it be
the case that you need to specify python-psycopg2 instead?

Paul
 
S

Steven Samuel Cole

Hey Paul

thanks for your reply! :)

2008/11/21 Paul Boddie said:
Are you saying that psycopg2 needs setuptools for the setup.py script
to work? This isn't generally the case (or wasn't), but maybe the
"entry point" is a setuptools thing which would then demand that
software's presence.

Not exactly. My package requires psycopg2 to run and (from what it
looks like to me) setuptools must be available in order to use its
installation mechanism (setup.py, entry points, etc.)
How does stdeb know which package provides psycopg2? I'm not really
familiar with stdeb - I write my own packaging files - but might it be
the case that you need to specify python-psycopg2 instead?

I tried python-psycopg2, but that caused a ValueError in stdeb about a
'parenthesized list' -psycopg2.
By trial & error I found out that I seem to have to use the package
name without the python- bit, because then stdeb does run without
error.

If the name was really the issue, I would at least expect stdeb to
report an error about an unknown package or so...

Cheers,

Stefan
 
S

Steven Samuel Cole

That's exactly the piece of information I needed! :)

The control file created by setdeb (stdeb_run_setup, to be precise)
looks like this (some lines will get wrapped):

Source: <my package name>
Maintainer: <my name> <my email address>
Section: python
Priority: optional
Build-Depends: python-setuptools (>= 0.6b3-1), python-all-dev (>=
2.3.5-11), debhelper (>= 5.0.38), python-central (>= 0.5.6)
Standards-Version: 3.7.2
XS-Python-Version: all

Package: python-<my package name>
Architecture: all
Depends: ${python:Depends}
Recommends:
Suggests:
XB-Python-Version: ${python:Versions}
Provides: ${python:provides}
Description: <my description>

So apparently, stdeb adds setuptools by itself already, but it does not
add the dependency packages I specified in setup.py.

When I now append python-psycopg2 (>= 2.0.6-3) to the Depends: copy the
..deb file to the virtual machine and run sudo dpkg -i python-<my package
name>-all.deb, I get the following output:

Selecting previously deselected package python-<my package name>.
(Reading database ... 17508 files and directories currently installed.)
Unpacking python-<my package name> (from python-<my package
name>_0.0.1-4927-1_all.deb) ...
dpkg: dependency problems prevent configuration of python-inro-marvin-setup:
python-<my package name> depends on python-psycopg2 (>= 2.0.6-3); however:
Package python-psycopg2 is not installed.
dpkg: error processing python-<my package name> (--install):
dependency problems - leaving unconfigured
Errors were encountered while processing:
python-<my package name>


My conclusions:

1. I must use a 'higher-level' tool than dpkg to install the package
which automatically resolves and installs dependency packages. There has
got to be a way to use apt-get for .deb files which do not reside
(yet) in a repository.

2. stdeb does not seem to 'transform' dependencies specified in setup.py
into dependencies in its output files. There seems to be a mailing list
for stedb at http://mail.python.org/mailman/listinfo/distutils-sig. I'll
try there.

Thanks for your help!

Cheers,

Steve
 
P

Paul Boddie

1. I must use a 'higher-level' tool than dpkg to install the package
which automatically resolves and installs dependency packages. There has
got to be a way to use apt-get for .deb files which do not reside
(yet) in a repository.

I more or less skipped the part about installation, but had the
dependencies been included correctly in the package description and
had they not been available, dpkg would have complained. You can use
apt-get with local repositories, although the magic required for
initialising them isn't too obvious. That said, if it's like the
package building scene, I'm sure various tools exist for initialising
repositories; I use a very short shell script to run the programs that
update the repository records.
2. stdeb does not seem to 'transform' dependencies specified in setup.py
into dependencies in its output files. There seems to be a mailing list
for stedb athttp://mail.python.org/mailman/listinfo/distutils-sig. I'll
try there.

Good luck! One of the issues with such transformations is that they
cannot generally be done trivially, but perhaps some kind of mapping
between "upstream" source packages and Debian packages would alleviate
such difficulties.

Paul
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,007
Latest member
obedient dusk

Latest Threads

Top