Created
November 7, 2013 02:25
-
-
Save tclh123/7347916 to your computer and use it in GitHub Desktop.
django's setup.py
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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: | |
lib_paths = [get_python_lib()] | |
if lib_paths[0].startswith("/usr/lib/"): | |
# We have to try also with an explicit prefix of /usr/local in order to | |
# catch Debian's custom user site-packages directory. | |
lib_paths.append(get_python_lib(prefix="/usr/local")) | |
for lib_path in lib_paths: | |
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='[email protected]', | |
description=('A high-level Python Web framework that encourages ' | |
'rapid development and clean, pragmatic design.'), | |
license='BSD', | |
packages=packages, | |
package_data=package_data, | |
scripts=['django/bin/django-admin.py'], | |
classifiers=[ | |
'Development Status :: 3 - Alpha', | |
'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.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}) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment