From b57704aa82eceba7387be883001c4a2489d8c8ce Mon Sep 17 00:00:00 2001 From: Daira Hopwood Date: Tue, 30 Sep 2014 19:02:49 +0100 Subject: [PATCH] Make dependencies different for Windows and non-Windows. Also move require_more() to top-level. fixes #2249 Signed-off-by: Daira Hopwood --- src/allmydata/_auto_deps.py | 120 ++++++++++++++++++++++++++---------- 1 file changed, 87 insertions(+), 33 deletions(-) diff --git a/src/allmydata/_auto_deps.py b/src/allmydata/_auto_deps.py index 6365119e..61c6c1c2 100644 --- a/src/allmydata/_auto_deps.py +++ b/src/allmydata/_auto_deps.py @@ -18,23 +18,6 @@ install_requires = [ # zope.interface 3.6.3 and 3.6.4 are incompatible with Nevow (#1435). "zope.interface == 3.6.0, == 3.6.1, == 3.6.2, >= 3.6.5", - # * On Windows we need at least Twisted 9.0 to avoid an indirect - # dependency on pywin32. - # * On Linux we need at least Twisted 10.1.0 for inotify support used by - # the drop-upload frontend. - # * We also need Twisted 10.1 for the FTP frontend in order for Twisted's - # FTP server to support asynchronous close. - # * When the cloud backend lands, it will depend on Twisted 10.2.0 which - # includes the fix to https://twistedmatrix.com/trac/ticket/411 - # * The SFTP frontend depends on Twisted 11.0.0 to fix the SSH server - # rekeying bug http://twistedmatrix.com/trac/ticket/4395 - # - # service-identity is necessary for Twisted and pyOpenSSL to be able to - # verify PKI certificates. - # - "Twisted >= 11.0.0", - "service-identity", - # * foolscap < 0.5.1 had a performance bug which spent O(N**2) CPU for # transferring large mutable files of size N. # * foolscap < 0.6 is incompatible with Twisted 10.2.0. @@ -52,15 +35,11 @@ install_requires = [ # library, we need to update this declaration here. # "foolscap >= 0.6.3", - "pyOpenSSL", - - "Nevow >= 0.6.0", # Needed for SFTP. pyasn1 is needed by twisted.conch in Twisted >= 9.0. # pycrypto 2.2 doesn't work due to https://bugs.launchpad.net/pycrypto/+bug/620253 # pycrypto 2.4 doesn't work due to https://bugs.launchpad.net/pycrypto/+bug/881130 "pycrypto == 2.1.0, == 2.3, >= 2.4.1", - "pyasn1 >= 0.0.8a", # http://www.voidspace.org.uk/python/mock/ , 0.8.0 provides "call" "mock >= 0.8.0", @@ -89,7 +68,6 @@ package_imports = [ ('pycrypto', 'Crypto'), ('pyasn1', 'pyasn1'), ('mock', 'mock'), - ('service-identity', 'service_identity') ] # Dependencies for which we don't know how to get a version number at run-time. @@ -97,6 +75,7 @@ not_import_versionable = [ 'zope.interface', 'mock', 'pyasn1', + 'pyasn1-modules', ] # Dependencies reported by pkg_resources that we can safely ignore. @@ -110,17 +89,92 @@ ignorable = [ 'twisted-conch', ] -def require_more(): - import sys - - # Don't try to get the version number of setuptools in frozen builds, because - # that triggers 'site' processing that causes failures. Note that frozen - # builds still (unfortunately) import pkg_resources in .tac files, so the - # entry for setuptools in install_requires above isn't conditional. - if not hasattr(sys, 'frozen'): - package_imports.append(('setuptools', 'setuptools')) - -require_more() +import sys + +# Don't try to get the version number of setuptools in frozen builds, because +# that triggers 'site' processing that causes failures. Note that frozen +# builds still (unfortunately) import pkg_resources in .tac files, so the +# entry for setuptools in install_requires above isn't conditional. +if not hasattr(sys, 'frozen'): + package_imports.append(('setuptools', 'setuptools')) + +if sys.platform == "win32": + install_requires += [ + # * On Windows we need at least Twisted 9.0 to avoid an indirect + # dependency on pywin32. + # * We also need Twisted 10.1 for the FTP frontend in order for + # Twisted's FTP server to support asynchronous close. + # * When the cloud backend lands, it will depend on Twisted 10.2.0 + # which includes the fix to . + # * The SFTP frontend depends on Twisted 11.0.0 to fix the SSH server + # rekeying bug + # * We don't want Twisted >= 13.0 to avoid a dependency of its endpoints + # code on pywin32. + # + "Twisted == 11.0.0, == 11.1.0, == 12.0.0, == 12.1.0, == 12.2.0", + + # * We need Nevow >= 0.9.33 to avoid a bug in Nevow's setup.py + # which imported twisted at setup time. + # * We don't want Nevow 0.11 because that requires Twisted >= 13.0 + # which conflicts with the Twisted requirement above. + # + # + "Nevow == 0.9.33, == 0.10", + + # We don't want pyOpenSSL >= 0.14 because it depends on cffi + # (via cryptography), which currently has an unreliable build + # process for Windows. + # + # + "pyOpenSSL == 0.13, == 0.13.1", + + # pyasn1 is needed by twisted.conch in Twisted >= 9.0. + "pyasn1 >= 0.0.8a", + ] +else: + install_requires += [ + # * On Linux we need at least Twisted 10.1.0 for inotify support + # used by the drop-upload frontend. + # * Nevow 0.11.1 requires Twisted >= 13.0.0 so we might as well + # require it directly; this helps to work around + # . + # This also satisfies the requirements for the FTP and SFTP + # frontends and cloud backend mentioned in the Windows section + # above. + # + "Twisted >= 13.0.0", + + # Nevow >= 0.11.1 can be installed using pip. + "Nevow >= 0.11.1", + + # pyOpenSSL >= 0.13 is needed in order to fix + # . + "pyOpenSSL >= 0.13", + + # ... and now all the new stuff that pyOpenSSL 0.14 transitively + # depends on. We specify these explicitly because setuptools is + # bad at correctly resolving indirect dependencies (e.g. see + # ). + # + "cryptography", + "cffi >= 0.8", # latest cryptography depends on this version + "six >= 1.4.1", # latest cryptography depends on this version + "pycparser", # cffi depends on this + "service-identity", # this is needed to suppress complaints about being unable to verify certs + "characteristic >= 14.0.0", # latest service-identity depends on this version + "pyasn1 >= 0.1.4", # latest pyasn1-modules depends on this version + "pyasn1-modules", # service-identity depends on this + ] + + package_imports += [ + ('cryptography', 'cryptography'), + ('cffi', 'cffi'), + ('six', 'six'), + ('pycparser', 'pycparser'), + ('service-identity', 'service_identity'), + ('characteristic', 'characteristic'), + ('pyasn1-modules', 'pyasn1_modules'), + ] # These are suppressed globally: -- 2.45.2