2010-09-06 05:57:14 +00:00
|
|
|
# Note: do not import any module from Tahoe-LAFS itself in this
|
|
|
|
# file. Also please avoid importing modules from other packages than
|
|
|
|
# the Python Standard Library if at all possible (exception: we rely
|
|
|
|
# on importing pkg_resources, which is provided by setuptools,
|
|
|
|
# zetuptoolz, distribute, and perhaps in the future distutils2, for
|
|
|
|
# the require_auto_deps() function.)
|
|
|
|
|
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",
|
2010-08-02 07:17:48 +00:00
|
|
|
|
|
|
|
# foolscap < 0.5.1 had a performance bug which spent
|
|
|
|
# O(N**2) CPU for transferring large mutable files
|
|
|
|
# of size N.
|
2010-12-31 06:00:39 +00:00
|
|
|
# foolscap < 0.6 is incompatible with Twisted 10.2.0.
|
2011-01-19 06:06:39 +00:00
|
|
|
# foolscap 0.6.1 quiets a DeprecationWarning.
|
|
|
|
"foolscap[secure_connections] >= 0.6.1",
|
2008-10-25 13:47:39 +00:00
|
|
|
"Nevow >= 0.6.0",
|
2009-07-06 14:08:15 +00:00
|
|
|
|
2010-05-16 19:37:10 +00:00
|
|
|
# Needed for SFTP. pyasn1 is needed by twisted.conch in Twisted >= 9.0.
|
2010-08-29 23:00:38 +00:00
|
|
|
# pycrypto 2.2 doesn't work due to https://bugs.launchpad.net/pycrypto/+bug/620253
|
|
|
|
"pycrypto == 2.0.1, == 2.1, >= 2.3",
|
2010-05-20 18:14:37 +00:00
|
|
|
"pyasn1 >= 0.0.8a",
|
2010-04-16 19:04:04 +00:00
|
|
|
|
2011-01-18 20:51:14 +00:00
|
|
|
# http://www.voidspace.org.uk/python/mock/
|
|
|
|
"mock",
|
|
|
|
|
2010-05-04 16:10:43 +00:00
|
|
|
# Will be needed to test web apps, but not yet. See #1001.
|
|
|
|
#"windmill >= 1.3",
|
2009-07-27 19:30:08 +00:00
|
|
|
]
|
2009-06-30 18:48:07 +00:00
|
|
|
|
2010-09-21 14:03:44 +00:00
|
|
|
import platform
|
2010-11-01 05:21:42 +00:00
|
|
|
if platform.machine().lower() in ['i386', 'x86_64', 'amd64', 'x86', '']:
|
2010-09-21 14:03:44 +00:00
|
|
|
# pycryptopp v0.5.20 fixes bugs in SHA-256 and AES on x86 or amd64
|
|
|
|
# (from Crypto++ revisions 470, 471, 480, 492). The '' is there
|
|
|
|
# in case platform.machine is broken and this is actually an x86
|
|
|
|
# or amd64 machine.
|
|
|
|
install_requires.append("pycryptopp >= 0.5.20")
|
|
|
|
else:
|
2010-09-22 07:08:08 +00:00
|
|
|
# pycryptopp v0.5.13 had a new bundled version of Crypto++
|
|
|
|
# (v5.6.0) and a new bundled version of setuptools (although that
|
|
|
|
# shouldn't make any different to users of pycryptopp).
|
|
|
|
install_requires.append("pycryptopp >= 0.5.14")
|
2010-09-21 14:03:44 +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")
|
|
|
|
|
2008-12-06 00:19:11 +00:00
|
|
|
if hasattr(sys, 'frozen'): # for py2exe
|
2008-01-23 02:32:55 +00:00
|
|
|
install_requires=[]
|
2010-09-06 05:57:14 +00:00
|
|
|
del sys # clean up namespace
|
2008-01-23 00:24:33 +00:00
|
|
|
|
2010-06-05 03:17:13 +00:00
|
|
|
def require_python_version():
|
2010-06-09 00:36:46 +00:00
|
|
|
import sys, platform
|
2009-05-19 19:45:55 +00:00
|
|
|
|
2010-06-09 00:36:46 +00:00
|
|
|
# we require 2.4.4 on non-UCS-2, non-Redhat builds to avoid <http://www.python.org/news/security/PSF-2006-001/>
|
|
|
|
# we require 2.4.3 on non-UCS-2 Redhat, because 2.4.3 is common on Redhat-based distros and will have patched the above bug
|
2010-06-05 03:17:13 +00:00
|
|
|
# we require at least 2.4.2 in any case to avoid a bug in the base64 module: <http://bugs.python.org/issue1171487>
|
|
|
|
if sys.maxunicode == 65535:
|
|
|
|
if sys.version_info < (2, 4, 2) or sys.version_info[0] > 2:
|
2010-06-09 00:36:46 +00:00
|
|
|
raise NotImplementedError("Tahoe-LAFS current requires Python v2.4.2 or greater "
|
|
|
|
"for a UCS-2 build (but less than v3), not %r" %
|
|
|
|
(sys.version_info,))
|
|
|
|
elif platform.platform().lower().find('redhat') >= 0:
|
|
|
|
if sys.version_info < (2, 4, 3) or sys.version_info[0] > 2:
|
|
|
|
raise NotImplementedError("Tahoe-LAFS current requires Python v2.4.3 or greater "
|
|
|
|
"on Redhat-based distributions (but less than v3), not %r" %
|
2010-06-05 03:17:13 +00:00
|
|
|
(sys.version_info,))
|
|
|
|
else:
|
|
|
|
if sys.version_info < (2, 4, 4) or sys.version_info[0] > 2:
|
2010-06-09 00:36:46 +00:00
|
|
|
raise NotImplementedError("Tahoe-LAFS current requires Python v2.4.4 or greater "
|
|
|
|
"for a non-UCS-2 build (but less than v3), not %r" %
|
2010-06-05 03:17:13 +00:00
|
|
|
(sys.version_info,))
|
2009-05-19 19:45:55 +00:00
|
|
|
|
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 .
|
|
|
|
"""
|
2010-06-05 03:17:13 +00:00
|
|
|
require_python_version()
|
2009-05-19 19:45:55 +00:00
|
|
|
|
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
|