Skip to content

Commit c3de832

Browse files
committed
Merge branch 'release-0.0.7'
2 parents 702e592 + aab72dd commit c3de832

File tree

4 files changed

+36
-19
lines changed

4 files changed

+36
-19
lines changed

CHANGELOG.rst

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,14 @@
22
33

44
.. Keep the current version number on line number 5
5+
0.0.7
6+
=====
7+
8+
2020-04-19
9+
10+
* Add support for multiple 'requirements.txt' files
11+
12+
513
0.0.6
614
=====
715

README.rst

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@ Standalone application
2828

2929
.. code::
3030
31-
usage: zapp [-h] [--version] [--requirement requirements.txt]
31+
$ zapp --help
32+
usage: zapp [-h] [--version] [--requirements requirements.txt]
3233
output_file entry_point [requirement [requirement ...]]
3334
3435
positional arguments:
@@ -39,21 +40,21 @@ Standalone application
3940
optional arguments:
4041
-h, --help show this help message and exit
4142
--version show program's version number and exit
42-
--requirement requirements.txt, -r requirements.txt
43+
--requirements requirements.txt, -r requirements.txt
4344
4445
4546
.. code::
4647
4748
zapp ~/bin/myapp myapp.cli:main 'myapp==1.2.3' 'mylib==3.2.1'
48-
zapp ~/bin/myapp myapp.cli:main --requirement requirements.txt
49+
zapp ~/bin/myapp myapp.cli:main --requirements A.txt --requirements B.txt
4950
5051
python3 -m zapp ~/bin/myapp myapp.cli:main 'myapp==1.2.3' 'mylib==3.2.1'
5152
5253
zapp toolmaker.pyz toolmaker.cli:main toolmaker
5354
zapp pipdeptree.pyz pipdeptree:main pipdeptree
5455
zapp ~/bin/httpie httpie.__main__:main httpie
5556
56-
# Without requirements
57+
# Without requirements (use an entry point from Python's standard library)
5758
zapp zipfile.pyz zipfile:main
5859
5960
@@ -71,7 +72,10 @@ Library
7172
'myapp==1.2.3',
7273
'mylib==3.2.1',
7374
],
74-
requirements_txt='requirements.txt',
75+
requirements_txts=[
76+
'A.txt',
77+
'B.txt',
78+
],
7579
)
7680
7781

src/zapp/cli.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,18 +21,18 @@ def main():
2121
parser.add_argument('entry_point')
2222
parser.add_argument('requirements', metavar='requirement', nargs='*')
2323
parser.add_argument(
24-
'--requirement',
24+
'--requirements',
2525
'-r',
26-
dest='requirements_txt',
26+
action='append',
27+
dest='requirements_txts',
2728
metavar='requirements.txt',
28-
type=argparse.FileType(),
2929
)
3030
args = parser.parse_args()
3131
core.build_zapp(
3232
args.output_file,
3333
args.entry_point,
3434
args.requirements,
35-
getattr(args.requirements_txt, 'name', None),
35+
args.requirements_txts,
3636
)
3737

3838

src/zapp/core.py

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ def _venv_create(venv_dir):
4343
def _pip_install(
4444
venv_context,
4545
requirements=None,
46-
requirements_txt=None,
46+
requirements_txts=None,
4747
target_dir=None,
4848
):
4949
command = [
@@ -55,23 +55,28 @@ def _pip_install(
5555
command.extend(['--target', target_dir])
5656
if requirements:
5757
command.extend(requirements)
58-
if requirements_txt:
59-
command.extend(['--requirement', requirements_txt])
58+
if requirements_txts:
59+
for requirements_txt in requirements_txts:
60+
command.extend(['--requirement', requirements_txt])
6061
subprocess.check_call(command)
6162

6263

63-
def _install_to_dir(target_dir, requirements=None, requirements_txt=None):
64+
def _install_to_dir(
65+
target_dir,
66+
requirements=None,
67+
requirements_txts=None,
68+
):
6469
""" Use pip to install the requirements into a specific directory
6570
"""
6671
# pip is not usable as a library, so it is much simpler and safer to just
6772
# create a virtual environment and run a pip process from there
6873
with tempfile.TemporaryDirectory() as venv_dir:
6974
venv_context = _venv_create(venv_dir)
70-
_pip_install(venv_context, ['wheel'])
75+
_pip_install(venv_context, requirements=['wheel'])
7176
_pip_install(
7277
venv_context,
7378
requirements=requirements,
74-
requirements_txt=requirements_txt,
79+
requirements_txts=requirements_txts,
7580
target_dir=target_dir,
7681
)
7782

@@ -89,16 +94,16 @@ def build_zapp(
8994
output_file,
9095
entry_point,
9196
requirements=None,
92-
requirements_txt=None,
97+
requirements_txts=None,
9398
):
9499
""" Build a zapp binary archive
95100
"""
96101
with tempfile.TemporaryDirectory() as install_dir:
97-
if requirements or requirements_txt:
102+
if requirements or requirements_txts:
98103
_install_to_dir(
99104
install_dir,
100105
requirements=requirements,
101-
requirements_txt=requirements_txt,
106+
requirements_txts=requirements_txts,
102107
)
103108
_create_zipapp_archive(install_dir, entry_point, output_file)
104109

@@ -195,7 +200,7 @@ def run(self):
195200
dist_file = dist[2]
196201
if not dist_file:
197202
raise BdistWheelMissing()
198-
_install_to_dir(self.bdist_dir, [dist_file])
203+
_install_to_dir(self.bdist_dir, requirements=[dist_file])
199204
self.mkpath(self.dist_dir)
200205
_create_zipapp_archive(
201206
self.bdist_dir,

0 commit comments

Comments
 (0)