2009-04-10 08:06:44 +00:00
# Scrapy setup.py script
#
2009-11-20 09:30:06 -02:00
# It doesn't depend on setuptools, but if setuptools is available it'll use
# some of its features, like package dependencies.
2009-04-10 08:06:44 +00:00
from distutils . command . install_data import install_data
from distutils . command . install import INSTALL_SCHEMES
import os
import sys
2008-09-18 14:58:43 +00:00
2009-04-10 08:06:44 +00:00
class osx_install_data ( install_data ) :
# On MacOS, the platform-specific lib dir is /System/Library/Framework/Python/.../
# which is wrong. Python 2.5 supplied with MacOS 10.5 has an Apple-specific fix
# for this in distutils.command.install_data#306. It fixes install_lib but not
# install_data, which is why we roll our own install_data class.
def finalize_options ( self ) :
# By the time finalize_options is called, install.install_lib is set to the
# fixed directory, so we set the installdir to install_lib. The
# install_data class uses ('install_data', 'install_dir') instead.
self . set_undefined_options ( ' install ' , ( ' install_lib ' , ' install_dir ' ) )
install_data . finalize_options ( self )
if sys . platform == " darwin " :
cmdclasses = { ' install_data ' : osx_install_data }
else :
cmdclasses = { ' install_data ' : install_data }
def fullsplit ( path , result = None ) :
"""
Split a pathname into components ( the opposite of os . path . join ) in a
platform - neutral way .
"""
if result is None :
result = [ ]
head , tail = os . path . split ( path )
if head == ' ' :
return [ tail ] + result
if head == path :
return result
return fullsplit ( head , [ tail ] + result )
# Tell distutils to put the data_files in platform-specific installation
# locations. See here for an explanation:
# http://groups.google.com/group/comp.lang.python/browse_thread/thread/35ec7b2fed36eaec/2105ee4d9e8042cb
for scheme in INSTALL_SCHEMES . values ( ) :
scheme [ ' data ' ] = scheme [ ' purelib ' ]
# Compile the list of packages available, because distutils doesn't have
# an easy way to do this.
packages , data_files = [ ] , [ ]
root_dir = os . path . dirname ( __file__ )
if root_dir != ' ' :
os . chdir ( root_dir )
def is_not_module ( filename ) :
return os . path . splitext ( f ) [ 1 ] not in [ ' .py ' , ' .pyc ' , ' .pyo ' ]
2010-09-03 15:54:42 -03:00
for scrapy_dir in [ ' scrapy ' , ' scrapyd ' ] :
for dirpath , dirnames , filenames in os . walk ( scrapy_dir ) :
# Ignore dirnames that start with '.'
for i , dirname in enumerate ( dirnames ) :
if dirname . startswith ( ' . ' ) : del dirnames [ i ]
if ' __init__.py ' in filenames :
packages . append ( ' . ' . join ( fullsplit ( dirpath ) ) )
data = [ f for f in filenames if is_not_module ( f ) ]
if data :
data_files . append ( [ dirpath , [ os . path . join ( dirpath , f ) for f in data ] ] )
elif filenames :
data_files . append ( [ dirpath , [ os . path . join ( dirpath , f ) for f in filenames ] ] )
2009-04-10 08:06:44 +00:00
# Small hack for working with bdist_wininst.
# See http://mail.python.org/pipermail/distutils-sig/2004-August/004134.html
if len ( sys . argv ) > 1 and sys . argv [ 1 ] == ' bdist_wininst ' :
for file_info in data_files :
file_info [ 0 ] = ' \\ PURELIB \\ %s ' % file_info [ 0 ]
2010-08-27 01:05:59 -03:00
scripts = [ ' bin/scrapy ' ]
2010-08-18 19:48:32 -03:00
if os . name == ' nt ' :
scripts . append ( ' extras/scrapy.bat ' )
2009-11-20 09:30:06 -02:00
setup_args = {
2009-12-12 15:48:02 -02:00
' name ' : ' Scrapy ' ,
2010-09-10 01:48:45 -03:00
' version ' : __import__ ( ' scrapy ' ) . __version__ ,
2009-11-20 09:30:06 -02:00
' url ' : ' http://scrapy.org ' ,
' description ' : ' A high-level Python Screen Scraping framework ' ,
' long_description ' : ' Scrapy is a high level scraping and web crawling framework for writing spiders to crawl and parse web pages for all kinds of purposes, from information retrieval to monitoring or testing web sites. ' ,
' author ' : ' Scrapy developers ' ,
' maintainer ' : ' Pablo Hoffman ' ,
' maintainer_email ' : ' pablo@pablohoffman.com ' ,
' license ' : ' BSD ' ,
' packages ' : packages ,
' cmdclass ' : cmdclasses ,
' data_files ' : data_files ,
2010-08-18 19:48:32 -03:00
' scripts ' : scripts ,
2009-11-20 09:30:06 -02:00
' classifiers ' : [
2009-09-17 11:22:48 -03:00
' Programming Language :: Python ' ,
' Programming Language :: Python :: 2.5 ' ,
' Programming Language :: Python :: 2.6 ' ,
' Programming Language :: Python :: 2.7 ' ,
' License :: OSI Approved :: BSD License ' ,
' Operating System :: OS Independent ' ,
' Development Status :: 5 - Production/Stable ' ,
' Intended Audience :: Developers ' ,
' Environment :: Console ' ,
' Topic :: Software Development :: Libraries :: Application Frameworks ' ,
' Topic :: Software Development :: Libraries :: Python Modules ' ,
' Topic :: Internet :: WWW/HTTP ' ,
]
2009-11-20 09:30:06 -02:00
}
try :
from setuptools import setup
setup_args [ ' install_requires ' ] = [ ' Twisted>=2.5 ' ]
except ImportError :
from distutils . core import setup
setup ( * * setup_args )