Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
Bug 215404 - Python setuptools installs packages with bad permissions
Summary: Python setuptools installs packages with bad permissions
Status: RESOLVED UPSTREAM
Alias: None
Product: Gentoo Linux
Classification: Unclassified
Component: [OLD] Development (show other bugs)
Hardware: All Linux
: High normal (vote)
Assignee: Python Gentoo Team
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2008-03-30 02:44 UTC by Gwern Branwen
Modified: 2008-10-10 18:21 UTC (History)
0 users

See Also:
Package list:
Runtime testing required: ---


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Gwern Branwen 2008-03-30 02:44:43 UTC
While installing Tahoe http://allmydata.org/trac/tahoe
I ran into problems after I did a 'sudo python setup.py install'. It compiled and installed fine, and it ran fine from within the source tree (./bin/tahoe), but when I attempted to use the system-wide tahoe executable, it failed on importing two libraries tahoe installed (allmydata and pyutils).

Eventually I discovered it was because the libraries were indeed in site-packages/, but they didn't have permissions allowing a mere user to read or use them. Which is a bad thing.

I am using Gentoo:

gwern@localhost:1001~>uname -a                                                                                                      [10:26PM]
Linux localhost 2.6.24-gentoo-r3 #8 SMP PREEMPT Mon Mar 17 23:08:31 EDT 2008 x86_64 Intel(R) Core(TM)2 Quad CPU @ 2.40GHz GenuineIntel GNU/Linux

I have installed:

*  dev-python/setuptools
      Latest version available: 0.6_rc8
      Latest version installed: 0.6_rc8
      Size of files: 244 kB
      Homepage:      http://peak.telecommunity.com/DevCenter/setuptools
      Description:   A collection of enhancements to the Python distutils including easy install
      License:       PSF-2.2

---

The Tahoe devs on #tahoe disclaim any responsibilty for this problem (I eventually fixed it with a recursive chmod), but I'm inlining their setup.py anyway:

--

#! /usr/bin/env python

# Allmydata Tahoe -- secure, distributed storage grid
# 
# Copyright (C) 2008 Allmydata, Inc.
# 
# This file is part of tahoe.
# 
# See the docs/about.html file for licensing information.

import os, re, sys

try:
    from ez_setup import use_setuptools
except ImportError:
    pass
else:
    # This invokes our own customized version of ez_setup.py to make sure that
    # setuptools >= v0.6c8 (a.k.a. v0.6-final) is installed.

    # setuptools < v0.6c8 doesn't handle eggs which get installed into the CWD
    # as a result of being transitively depended on in a setup_requires, but
    # then are needed for the installed code to run, i.e. in an
    # install_requires.
    use_setuptools(download_delay=0, min_version="0.6c8")

from setuptools import Extension, find_packages, setup

# Make the dependency-version-requirement, which is used by the Makefile at
# build-time, also available to the app at runtime:
import shutil
try:
    shutil.copyfile("_auto_deps.py", os.path.join("src", "allmydata", "_auto_deps.py"))
except EnvironmentError:
    # Nevermind then -- perhaps it is already in place and in any case we can do
    # without it.
    pass

trove_classifiers=[
    "Development Status :: 4 - Beta", 
    "Environment :: Console",
    "Environment :: Web Environment",
    "License :: OSI Approved :: GNU General Public License (GPL)", 
    "License :: DFSG approved",
    "License :: Other/Proprietary License",
    "Intended Audience :: Developers", 
    "Intended Audience :: End Users/Desktop",
    "Intended Audience :: System Administrators",
    "Operating System :: Microsoft",
    "Operating System :: Microsoft :: Windows",
    "Operating System :: Unix",
    "Operating System :: POSIX :: Linux",
    "Operating System :: POSIX",
    "Operating System :: MacOS :: MacOS X",
    "Operating System :: Microsoft :: Windows :: Windows NT/2000",
    "Operating System :: OS Independent", 
    "Natural Language :: English", 
    "Programming Language :: C", 
    "Programming Language :: Python", 
    "Topic :: Utilities",
    "Topic :: System :: Systems Administration",
    "Topic :: System :: Filesystems",
    "Topic :: System :: Distributed Computing",
    "Topic :: Software Development :: Libraries",
    "Topic :: Communications :: Usenet News",
    "Topic :: System :: Archiving :: Backup", 
    "Topic :: System :: Archiving :: Mirroring", 
    "Topic :: System :: Archiving", 
    ]


VERSIONFILE = "src/allmydata/_version.py"
verstr = "unknown"
try:
    verstrline = open(VERSIONFILE, "rt").read()
except EnvironmentError:
    pass # Okay, there is no version file.
else:
    VSRE = r"^verstr = ['\"]([^'\"]*)['\"]"
    mo = re.search(VSRE, verstrline, re.M)
    if mo:
        verstr = mo.group(1)
    else:
        print "unable to find version in %s" % (VERSIONFILE,)
        raise RuntimeError("if %s.py exists, it is required to be well-formed" % (VERSIONFILE,))

LONG_DESCRIPTION=\
"""Welcome to the Tahoe project, a secure, decentralized, fault-tolerant 
filesystem.  All of the source code is available under a Free Software, Open 
Source licence.

This filesystem is encrypted and spread over multiple peers in such a way that 
it remains available even when some of the peers are unavailable, 
malfunctioning, or malicious."""

miscdeps=os.path.join(os.getcwd(), 'misc', 'dependencies')
dependency_links=[os.path.join(miscdeps, t) for t in os.listdir(miscdeps) if t.endswith(".tar")]

# By adding a web page to the dependency_links we are able to put new packages
# up there and have them be automatically discovered by existing copies of the
# tahoe source when that source was built.
dependency_links.append("http://allmydata.org/trac/tahoe/wiki/Dependencies")

setup_requires = ['pyutil >= 1.3.16'] # used by the Windows installer builder, see misc/sub-ver.py

# darcsver is needed only if you want "./setup.py darcsver" to write a new
# version stamp in src/allmydata/_version.py, with a version number derived from
# darcs history.
# http://pypi.python.org/pypi/darcsver
setup_requires.append('darcsver >= 1.1.2')

# setuptools_darcs is required to produce complete distributions (such as with
# "sdist" or "bdist_egg"), unless there is a PKG-INFO file present which shows
# that this is itself a source distribution.
# http://pypi.python.org/pypi/setuptools_darcs
if not os.path.exists('PKG-INFO'):
    setup_requires.append('setuptools_darcs >= 1.1.0')

import _auto_deps

setup(name='allmydata-tahoe',
      version=verstr,
      description='secure, decentralized, fault-tolerant filesystem',
      long_description=LONG_DESCRIPTION,
      author='Allmydata, Inc.',
      author_email='tahoe-dev@allmydata.org',
      url='http://allmydata.org/',
      license='GNU GPL',
      package_dir = {'':'src'},
      packages=find_packages("src"),
      classifiers=trove_classifiers,
      test_suite="allmydata.test",
      install_requires=_auto_deps.install_requires,
      include_package_data=True,
      setup_requires=setup_requires,
      dependency_links=dependency_links,
      entry_points = { 'console_scripts': [ 'tahoe = allmydata.scripts.runner:run' ] },
      zip_safe=False, # We prefer unzipped for easier access.
      )


Reproducible: Always

Steps to Reproduce:
1. 'cd ~/trunk; sudo python setup.py install'
2. 'cd; tahoe start'
3. Witness an error like:

Traceback (most recent call last):
File "/usr/bin/tahoe", line 8, in <module>
load_entry_point('allmydata-tahoe==1.0.0-r2373', 'console_scripts', 'tahoe')()
File "/usr/lib64/python2.5/site-packages/setuptools-0.6c8.egg/pkg_resources.py", line 277, in load_entry_point
return get_distribution(dist).load_entry_point(group, name)
File "/usr/lib64/python2.5/site-packages/setuptools-0.6c8.egg/pkg_resources.py", line 2179, in load_entry_point
return ep.load()
File "/usr/lib64/python2.5/site-packages/setuptools-0.6c8.egg/pkg_resources.py", line 1912, in load
entry = __import__(self.module_name, globals(),globals(), ['__name__'])
File "/usr/lib64/python2.5/site-packages/allmydata_tahoe-1.0.0_r2373-py2.5.egg/allmydata/__init__.py", line 31, in <module>
_auto_deps.require_auto_deps()
File "/usr/lib64/python2.5/site-packages/allmydata_tahoe-1.0.0_r2373-py2.5.egg/allmydata/_auto_deps.py", line 38, in require_auto_deps
__import__(name)
File "/usr/lib64/python2.5/site-packages/zfec-1.3.4-py2.5-linux-x86_64.egg/zfec/__init__.py", line 19, in <module>
import easyfec, filefec, cmdline_zfec, cmdline_zunfec
File "/usr/lib64/python2.5/site-packages/zfec-1.3.4-py2.5-linux-x86_64.egg/zfec/filefec.py", line 2, in <module>
from pyutil import fileutil
ImportError: No module named pyutil




I thought about filing this upstream, but nobody at #tahoe or #python on Freenode mentioned seeing this before with setuptools (and I couldn't manage to log into Sourceforge's mess of a site).
Comment 1 Rob Cakebread (RETIRED) gentoo-dev 2008-10-10 18:21:39 UTC
This is a known issue upstream, we'll wait for them to work it out.

http://bugs.python.org/setuptools/issue6

Note: This bug doesn't affect ebuilds that use setuptools.