2008-10-25 13:47:39 +00:00
install_requires = [
2009-04-10 17:43:45 +00:00
# we require newer versions of setuptools (actually
# zetuptoolz) to build, but can handle older versions to run
2009-01-09 20:09:49 +00:00
" setuptools >= 0.6c6 " ,
2008-05-06 18:17:47 +00:00
2008-10-25 13:47:39 +00:00
" zfec >= 1.1.0 " ,
2008-11-25 21:37:51 +00:00
2009-04-10 17:43:45 +00:00
# Feisty has simplejson 1.4
2008-12-08 15:35:37 +00:00
" simplejson >= 1.4 " ,
2008-10-25 13:47:39 +00:00
2008-01-23 18:26:04 +00:00
" zope.interface " ,
2008-06-05 20:55:05 +00:00
" Twisted >= 2.4.0 " ,
2009-05-23 01:11:03 +00:00
" foolscap[secure_connections] >= 0.4.1 " ,
2008-10-25 13:47:39 +00:00
" Nevow >= 0.6.0 " ,
2009-07-06 14:08:15 +00:00
2009-07-27 19:30:08 +00:00
# pycryptopp v0.5.15 applied a patch from Wei Dai to fix an
# error in x86 assembly on CPUs that can't do SSE2. Fixes
# http://allmydata.org/trac/pycryptopp/ticket/24 .
# pycryptopp v0.5.14 patched the embedded Crypto++ to remove
# the usages of time functions, thus allowing mingw to build
# and link it for Python 2.6. If I knew a convenient,
# reliable way to test whether the compiler that builds
# pycryptopp will be mingw then I guess I would add that,
# along with the Python >= v2.6 and the platform == Windows.
# This is to work-around
# http://sourceforge.net/tracker/?func=detail&aid=2805976&group_id=2435&atid=302435
# .
2009-08-02 02:57:10 +00:00
" pycryptopp >= 0.5.15 " ,
2009-07-27 19:30:08 +00:00
]
2009-06-30 18:48:07 +00:00
2009-06-04 15:45:48 +00:00
# Sqlite comes built into Python >= 2.5, and is provided by the "pysqlite"
# distribution for Python 2.4.
2009-07-06 14:08:15 +00:00
import sys
2009-06-04 15:45:48 +00:00
if sys . version_info < ( 2 , 5 ) :
# pysqlite v2.0.5 was shipped in Ubuntu 6.06 LTS "dapper" and Nexenta NCP 1.
install_requires . append ( " pysqlite >= 2.0.5 " )
2009-02-14 00:49:39 +00:00
## The following block is commented-out because there is not currently a pywin32 package which
2009-11-21 05:56:44 +00:00
## can be easy_install'ed and also which actually makes "import win32api" succeed.
## See http://sourceforge.net/tracker/index.php?func=detail&aid=1799934&group_id=78018&atid=551954
## Users have to manually install pywin32 on Windows before installing Tahoe.
2009-02-14 00:49:39 +00:00
##import platform
##if platform.system() == "Windows":
## # Twisted requires pywin32 if it is going to offer process management functionality, or if
## # it is going to offer iocp reactor. We currently require process management. It would be
## # better if Twisted would declare that it requires pywin32 if it is going to offer process
2009-11-21 05:56:44 +00:00
## # management. That is twisted ticket #3238 -- http://twistedmatrix.com/trac/ticket/3238 .
## # On the other hand, Tahoe also depends on pywin32 for getting free disk space statistics
## # (although that is not a hard requirement: if win32api can't be imported then we don't
## # rely on having the disk stats).
2009-02-14 00:49:39 +00:00
## install_requires.append('pywin32')
2008-12-06 00:19:11 +00:00
if hasattr ( sys , ' frozen ' ) : # for py2exe
2008-01-23 02:32:55 +00:00
install_requires = [ ]
2008-01-23 00:24:33 +00:00
2009-05-19 19:45:55 +00:00
def require_python_2_with_working_base64 ( ) :
import sys
if sys . version_info [ 0 ] != 2 :
raise NotImplementedError ( " Tahoe-LAFS current requires Python v2.4.2 or greater (but less than v3), not %r " % ( sys . version_info , ) )
# make sure we have a working base64.b32decode. The one in
# python2.4.[01] was broken.
nodeid_b32 = ' t5g7egomnnktbpydbuijt6zgtmw4oqi5 '
2009-05-19 19:56:42 +00:00
import base64
nodeid = base64 . b32decode ( nodeid_b32 . upper ( ) )
2009-05-19 19:45:55 +00:00
if nodeid != " \x9f M \xf2 \x19 \xcc kU0 \xbf \x03 \r \x10 \x99 \xfb & \x9b - \xc7 A \x1d " :
raise NotImplementedError ( " There is a bug in this base64 module: %r . This was a known issue in Python v2.4.0 and v2.4.1 (http://bugs.python.org/issue1171487 ). Tahoe-LAFS current requires Python v2.4.2 or greater (but less than v3). The current Python version is %r " % ( base64 , sys . version_info , ) )
2008-01-23 00:24:33 +00:00
def require_auto_deps ( ) :
2008-08-15 17:22:34 +00:00
"""
The purpose of this function is to raise a pkg_resources exception if any of the
requirements can ' t be imported. This is just to give earlier and more explicit error
messages , as opposed to waiting until the source code tries to import some module from one
of these packages and gets an ImportError . This function gets called from
src / allmydata / __init__ . py .
"""
2009-05-19 19:45:55 +00:00
require_python_2_with_working_base64 ( )
2008-04-18 20:24:59 +00:00
import pkg_resources
for requirement in install_requires :
try :
pkg_resources . require ( requirement )
except pkg_resources . DistributionNotFound :
# there is no .egg-info present for this requirement, which
# either means that it isn't installed, or it is installed in a
# way that pkg_resources can't find it (but regular python
# might). There are several older Linux distributions which
# provide our dependencies just fine, but they don't ship
# .egg-info files. Note that if there *is* an .egg-info file,
# but it shows a too-old version, then we'll get a
# VersionConflict error instead of DistributionNotFound.
pass
2009-01-19 22:04:35 +00:00
def get_package_versions_from_setuptools ( ) :
import pkg_resources
return dict ( [ ( p . project_name , ( p . version , p . location ) ) for p in pkg_resources . require ( ' allmydata-tahoe ' ) ] )