| import os |
| import sys |
| |
| from distutils.core import setup |
| from distutils.sysconfig import get_python_lib |
| |
| # Warn if we are installing over top of an existing installation. This can |
| # cause issues where files that were deleted from a more recent Django are |
| # still present in site-packages. See #18115. |
| overlay_warning = False |
| if "install" in sys.argv: |
| # We have to try also with an explicit prefix of /usr/local in order to |
| # catch Debian's custom user site-packages directory. |
| for lib_path in get_python_lib(), get_python_lib(prefix="/usr/local"): |
| existing_path = os.path.abspath(os.path.join(lib_path, "django")) |
| if os.path.exists(existing_path): |
| # We note the need for the warning here, but present it after the |
| # command is run, so it's more likely to be seen. |
| overlay_warning = True |
| break |
| |
| |
| 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) |
| |
| |
| EXCLUDE_FROM_PACKAGES = ['django.conf.project_template', |
| 'django.conf.app_template', |
| 'django.bin'] |
| |
| |
| def is_package(package_name): |
| for pkg in EXCLUDE_FROM_PACKAGES: |
| if package_name.startswith(pkg): |
| return False |
| return True |
| |
| |
| # Compile the list of packages available, because distutils doesn't have |
| # an easy way to do this. |
| packages, package_data = [], {} |
| |
| root_dir = os.path.dirname(__file__) |
| if root_dir != '': |
| os.chdir(root_dir) |
| django_dir = 'django' |
| |
| for dirpath, dirnames, filenames in os.walk(django_dir): |
| # Ignore PEP 3147 cache dirs and those whose names start with '.' |
| dirnames[:] = [d for d in dirnames if not d.startswith('.') and d != '__pycache__'] |
| parts = fullsplit(dirpath) |
| package_name = '.'.join(parts) |
| if '__init__.py' in filenames and is_package(package_name): |
| packages.append(package_name) |
| elif filenames: |
| relative_path = [] |
| while '.'.join(parts) not in packages: |
| relative_path.append(parts.pop()) |
| relative_path.reverse() |
| path = os.path.join(*relative_path) |
| package_files = package_data.setdefault('.'.join(parts), []) |
| package_files.extend([os.path.join(path, f) for f in filenames]) |
| |
| |
| # Dynamically calculate the version based on django.VERSION. |
| version = __import__('django').get_version() |
| |
| |
| setup( |
| name='Django', |
| version=version, |
| url='http://www.djangoproject.com/', |
| author='Django Software Foundation', |
| author_email='foundation@djangoproject.com', |
| description=('A high-level Python Web framework that encourages ' |
| 'rapid development and clean, pragmatic design.'), |
| download_url='https://www.djangoproject.com/m/releases/1.5/Django-1.5.8.tar.gz', |
| license='BSD', |
| packages=packages, |
| package_data=package_data, |
| scripts=['django/bin/django-admin.py'], |
| classifiers=[ |
| 'Development Status :: 5 - Production/Stable', |
| 'Environment :: Web Environment', |
| 'Framework :: Django', |
| 'Intended Audience :: Developers', |
| 'License :: OSI Approved :: BSD License', |
| 'Operating System :: OS Independent', |
| 'Programming Language :: Python', |
| 'Programming Language :: Python :: 2', |
| 'Programming Language :: Python :: 2.6', |
| 'Programming Language :: Python :: 2.7', |
| 'Programming Language :: Python :: 3', |
| 'Programming Language :: Python :: 3.2', |
| 'Programming Language :: Python :: 3.3', |
| 'Topic :: Internet :: WWW/HTTP', |
| 'Topic :: Internet :: WWW/HTTP :: Dynamic Content', |
| 'Topic :: Internet :: WWW/HTTP :: WSGI', |
| 'Topic :: Software Development :: Libraries :: Application Frameworks', |
| 'Topic :: Software Development :: Libraries :: Python Modules', |
| ], |
| ) |
| |
| if overlay_warning: |
| sys.stderr.write(""" |
| |
| ======== |
| WARNING! |
| ======== |
| |
| You have just installed Django over top of an existing |
| installation, without removing it first. Because of this, |
| your install may now include extraneous files from a |
| previous version that have since been removed from |
| Django. This is known to cause a variety of problems. You |
| should manually remove the |
| |
| %(existing_path)s |
| |
| directory and re-install Django. |
| |
| """ % {"existing_path": existing_path}) |