Mercurial > skaapsteker
annotate setup.py @ 545:067d3d80ff2e
Sort out setup.py imports, use find_packages()
author | Stefano Rivera <stefano@rivera.za.net> |
---|---|
date | Sun, 10 Apr 2011 00:41:43 +0200 |
parents | 4e8be9c52952 |
children | 366e58e8d057 |
rev | line source |
---|---|
0 | 1 # usage: python setup.py command |
2 # | |
3 # sdist - build a source dist | |
4 # py2exe - build an exe | |
5 # py2app - build an app | |
6 # cx_freeze - build a linux binary (not implemented) | |
7 # | |
8 # the goods are placed in the dist dir for you to .zip up or whatever... | |
9 | |
545
067d3d80ff2e
Sort out setup.py imports, use find_packages()
Stefano Rivera <stefano@rivera.za.net>
parents:
539
diff
changeset
|
10 import glob |
067d3d80ff2e
Sort out setup.py imports, use find_packages()
Stefano Rivera <stefano@rivera.za.net>
parents:
539
diff
changeset
|
11 import os |
067d3d80ff2e
Sort out setup.py imports, use find_packages()
Stefano Rivera <stefano@rivera.za.net>
parents:
539
diff
changeset
|
12 import shutil |
067d3d80ff2e
Sort out setup.py imports, use find_packages()
Stefano Rivera <stefano@rivera.za.net>
parents:
539
diff
changeset
|
13 import sys |
067d3d80ff2e
Sort out setup.py imports, use find_packages()
Stefano Rivera <stefano@rivera.za.net>
parents:
539
diff
changeset
|
14 |
067d3d80ff2e
Sort out setup.py imports, use find_packages()
Stefano Rivera <stefano@rivera.za.net>
parents:
539
diff
changeset
|
15 from setuptools import setup, find_packages, Extension |
067d3d80ff2e
Sort out setup.py imports, use find_packages()
Stefano Rivera <stefano@rivera.za.net>
parents:
539
diff
changeset
|
16 try: |
067d3d80ff2e
Sort out setup.py imports, use find_packages()
Stefano Rivera <stefano@rivera.za.net>
parents:
539
diff
changeset
|
17 import py2exe |
067d3d80ff2e
Sort out setup.py imports, use find_packages()
Stefano Rivera <stefano@rivera.za.net>
parents:
539
diff
changeset
|
18 except: |
067d3d80ff2e
Sort out setup.py imports, use find_packages()
Stefano Rivera <stefano@rivera.za.net>
parents:
539
diff
changeset
|
19 pass |
067d3d80ff2e
Sort out setup.py imports, use find_packages()
Stefano Rivera <stefano@rivera.za.net>
parents:
539
diff
changeset
|
20 |
067d3d80ff2e
Sort out setup.py imports, use find_packages()
Stefano Rivera <stefano@rivera.za.net>
parents:
539
diff
changeset
|
21 |
0 | 22 |
23 APP_NAME = 'skaapsteker' | |
24 DESCRIPTION = open('README.txt').read() | |
25 CHANGES = open('CHANGES.txt').read() | |
26 TODO = open('TODO.txt').read() | |
27 | |
28 | |
29 | |
30 METADATA = { | |
31 'name':APP_NAME, | |
32 'version': '0.0.1', | |
33 'license': 'short_licence', | |
34 'description': '', | |
35 'author': 'Adrianna Pinska, Anna Malczyk, Jeremy Thurgood, Neil Muller, Oliver Hambsch, Simon Cross, Stefano Rivera', | |
36 #'author_email': '', | |
37 'url': 'http://pyweek.org/e/skaapsteker', | |
38 'classifiers': [ | |
39 'Development Status :: 4 - Beta', | |
40 'Intended Audience :: End Users/Desktop', | |
41 'Intended Audience :: Information Technology', | |
42 'License :: OSI Approved :: BSD License', | |
43 'Operating System :: OS Independent', | |
44 'Programming Language :: Python :: 2', | |
45 'Programming Language :: Python :: 2.6', | |
46 'Programming Language :: Python :: 2.7', | |
47 'Topic :: Software Development :: Libraries :: pygame', | |
48 'Topic :: Games/Entertainment :: Real Time Strategy', | |
49 ], | |
50 | |
51 | |
52 'py2exe.target':'', | |
53 #'py2exe.icon':'icon.ico', #64x64 | |
54 'py2exe.binary':APP_NAME, #leave off the .exe, it will be added | |
55 | |
56 'py2app.target':APP_NAME, | |
57 'py2app.icon':'icon.icns', #128x128 | |
58 | |
59 #'cx_freeze.cmd':'~/src/cx_Freeze-3.0.3/FreezePython', | |
60 'cx_freeze.cmd':'cxfreeze', | |
61 'cx_freeze.target':'%s_linux' % APP_NAME, | |
62 'cx_freeze.binary':APP_NAME, | |
63 } | |
64 | |
65 files_to_remove = ['tk84.dll', | |
66 '_ssl.pyd', | |
67 'tcl84.dll', | |
68 os.path.join('numpy','core', '_dotblas.pyd'), | |
69 os.path.join('numpy', 'linalg', 'lapack_lite.pyd'), | |
70 ] | |
71 | |
72 | |
73 directories_to_remove = [os.path.join('numpy', 'distutils'), | |
74 'distutils', | |
75 'tcl', | |
76 ] | |
77 | |
78 | |
79 cmdclass = {} | |
80 PACKAGEDATA = { | |
81 'cmdclass': cmdclass, | |
545
067d3d80ff2e
Sort out setup.py imports, use find_packages()
Stefano Rivera <stefano@rivera.za.net>
parents:
539
diff
changeset
|
82 'packages': find_packages(), |
0 | 83 'scripts': ['scripts/skaapsteker'], |
84 } | |
85 | |
86 PACKAGEDATA.update(METADATA) | |
87 | |
88 | |
89 try: | |
90 cmd = sys.argv[1] | |
91 except IndexError: | |
92 print 'Usage: setup.py install|py2exe|py2app|cx_freeze' | |
93 raise SystemExit | |
94 | |
95 # utility for adding subdirectories | |
96 def add_files(dest,generator): | |
97 for dirpath, dirnames, filenames in generator: | |
98 for name in 'CVS', '.svn': | |
99 if name in dirnames: | |
100 dirnames.remove(name) | |
101 | |
102 for name in filenames: | |
103 if '~' in name: continue | |
104 suffix = os.path.splitext(name)[1] | |
105 if suffix in ('.pyc', '.pyo'): continue | |
106 if name[0] == '.': continue | |
107 filename = os.path.join(dirpath, name) | |
108 dest.append(filename) | |
109 | |
110 # define what is our data | |
539
4e8be9c52952
Correct data location in setup.py
Stefano Rivera <stefano@rivera.za.net>
parents:
3
diff
changeset
|
111 _DATA_DIR = 'data' |
0 | 112 data = [] |
113 add_files(data,os.walk(_DATA_DIR)) | |
114 | |
115 | |
116 | |
117 | |
118 #data_dirs = [os.path.join(f2.replace(_DATA_DIR, 'data'), '*') for f2 in data] | |
119 data_dirs = [os.path.join(f2.replace(_DATA_DIR, 'data')) for f2 in data] | |
120 PACKAGEDATA['package_data'] = {'skaapsteker': data_dirs} | |
121 | |
122 | |
123 | |
124 | |
125 | |
126 data.extend(glob.glob('*.txt')) | |
127 #data.append('MANIFEST.in') | |
128 # define what is our source | |
129 src = [] | |
130 add_files(src,os.walk('skaapsteker')) | |
131 src.extend(glob.glob('*.py')) | |
132 | |
133 | |
134 | |
135 | |
136 # build the sdist target | |
137 if cmd not in "py2exe py2app cx_freeze".split(): | |
138 f = open("MANIFEST.in","w") | |
139 for l in data: f.write("include "+l+"\n") | |
140 for l in src: f.write("include "+l+"\n") | |
141 f.close() | |
142 | |
143 setup(**PACKAGEDATA) | |
144 | |
145 # build the py2exe target | |
146 if cmd in ('py2exe',): | |
147 dist_dir = os.path.join('dist',METADATA['py2exe.target']) | |
148 data_dir = dist_dir | |
149 | |
150 src = 'run_game.py' | |
151 dest = METADATA['py2exe.binary']+'.py' | |
152 shutil.copy(src,dest) | |
153 | |
154 setup( | |
155 options={'py2exe':{ | |
156 'dist_dir':dist_dir, | |
157 'dll_excludes':['_dotblas.pyd','_numpy.pyd', 'numpy.linalg.lapack_lite.pyd', 'numpy.core._dotblas.pyd'] + files_to_remove, | |
158 'excludes':['matplotlib', 'tcl', 'OpenGL'], | |
159 'ignores':['matplotlib', 'tcl', 'OpenGL'], | |
160 'bundle_files':1, | |
161 }}, | |
162 # windows=[{ | |
163 console=[{ | |
164 'script':dest, | |
165 #'icon_resources':[(1,METADATA['py2exe.icon'])], | |
166 }], | |
167 ) | |
168 | |
169 # build the py2app target | |
170 if cmd == 'py2app': | |
171 dist_dir = os.path.join('dist',METADATA['py2app.target']+'.app') | |
172 data_dir = os.path.join(dist_dir,'Contents','Resources') | |
173 | |
174 src = 'run_game.py' | |
175 dest = METADATA['py2app.target']+'.py' | |
176 shutil.copy(src,dest) | |
177 | |
178 APP = [dest] | |
179 DATA_FILES = [] | |
180 OPTIONS = {'argv_emulation': True, | |
181 #'iconfile':METADATA['py2app.icon'] | |
182 } | |
183 | |
184 setup( | |
185 app=APP, | |
186 data_files=DATA_FILES, | |
187 options={'py2app': OPTIONS}, | |
188 setup_requires=['py2app'], | |
189 ) | |
190 | |
191 # make the cx_freeze target | |
192 if cmd == 'cx_freeze': | |
193 app_dist_dir = METADATA['cx_freeze.target'] + "_" + METADATA['version'] | |
194 dist_dir = os.path.join('dist', app_dist_dir) | |
195 data_dir = dist_dir | |
196 | |
197 modules_exclude = "tcl,tk" | |
198 cmd_args = (METADATA['cx_freeze.cmd'], dist_dir, METADATA['cx_freeze.binary'], modules_exclude) | |
199 sys_cmd = '%s --install-dir=%s --target-name=%s --exclude-modules=%s run_game.py' % cmd_args | |
200 print sys_cmd | |
201 os.system(sys_cmd) | |
202 | |
203 import shutil | |
204 if os.path.exists(os.path.join(data_dir, "tcl")): | |
205 shutil.rmtree( os.path.join(data_dir, "tcl") ) | |
206 if os.path.exists(os.path.join(data_dir, "tk")): | |
207 shutil.rmtree( os.path.join(data_dir, "tk") ) | |
208 | |
209 | |
210 | |
211 # recursively make a bunch of folders | |
212 def make_dirs(dname_): | |
213 parts = list(os.path.split(dname_)) | |
214 dname = None | |
215 while len(parts): | |
216 if dname == None: | |
217 dname = parts.pop(0) | |
218 else: | |
219 dname = os.path.join(dname,parts.pop(0)) | |
220 if not os.path.isdir(dname): | |
221 os.mkdir(dname) | |
222 | |
223 # copy data into the binaries | |
224 if cmd in ('py2exe','cx_freeze','py2app'): | |
225 dest = data_dir | |
226 for fname in data: | |
227 dname = os.path.join(dest,os.path.dirname(fname)) | |
228 make_dirs(dname) | |
229 if not os.path.isdir(fname): | |
230 #print (fname,dname) | |
231 shutil.copy(fname,dname) | |
232 | |
233 # make a tgz files. | |
234 if cmd == 'cx_freeze': | |
235 sys_cmd = "cd dist; tar -vczf %s.tgz %s/" % (app_dist_dir,app_dist_dir) | |
236 os.system(sys_cmd) | |
237 | |
238 | |
239 # remove files from the zip. | |
240 if 0 and cmd in ('py2exe'): | |
241 import shutil | |
242 | |
243 #shutil.rmtree( os.path.join('dist') ) | |
244 #shutil.rmtree( os.path.join('build') ) | |
245 | |
246 | |
247 os.system("unzip dist/library.zip -d dist\library") | |
248 | |
249 for fn in files_to_remove: | |
250 os.remove( os.path.join('dist', 'library', fn) ) | |
251 | |
252 | |
253 for d in directories_to_remove: | |
254 if os.path.exists( os.path.join('dist', 'library', d) ): | |
255 shutil.rmtree( os.path.join('dist', 'library', d) ) | |
256 | |
257 os.remove( os.path.join('dist', 'library.zip') ) | |
258 | |
259 | |
260 os.chdir("dist") | |
261 os.chdir("library") | |
262 | |
263 os.system("zip -r -9 ..\library.zip .") | |
264 | |
265 os.chdir("..") | |
266 os.chdir("..") |