Skip to content

Commit 2abf849

Browse files
authored
Merge pull request #19 from pomponchik/develop
0.0.25
2 parents 490cd1f + 6d443f6 commit 2abf849

12 files changed

+31
-42
lines changed

.gitignore

+2
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,5 @@ tests/cli/data/chpok
1212
tests/cli/data/pok
1313
.idea
1414
.ruff_cache
15+
.mutmut-cache
16+
html

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
[![Downloads](https://static.pepy.tech/badge/instld/month)](https://pepy.tech/project/instld)
66
[![Downloads](https://static.pepy.tech/badge/instld)](https://pepy.tech/project/instld)
77
[![codecov](https://codecov.io/gh/pomponchik/instld/graph/badge.svg?token=XuhCNeksjG)](https://codecov.io/gh/pomponchik/instld)
8+
[![Lines of code](https://sloc.xyz/github/pomponchik/instld/?category=code)](https://github.com/boyter/scc/)
89
[![Hits-of-Code](https://hitsofcode.com/github/pomponchik/instld?branch=main)](https://hitsofcode.com/github/pomponchik/instld/view?branch=main)
910
[![Tests](https://github.com/pomponchik/instld/actions/workflows/tests_and_coverage.yml/badge.svg)](https://github.com/pomponchik/instld/actions/workflows/tests_and_coverage.yml)
1011
[![Python versions](https://img.shields.io/pypi/pyversions/instld.svg)](https://pypi.python.org/pypi/instld)

docs/assets/console_record.mov

80.5 MB
Binary file not shown.

docs/assets/console_record_2.mov

58.9 MB
Binary file not shown.

docs/assets/presentation_2.pptx

60.3 MB
Binary file not shown.

docs/assets/terminal_2.gif

2.89 MB
Loading

docs/assets/terminal_3.gif

3.02 MB
Loading

docs/texts/habr/first_article.md

+2-40
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,3 @@
1-
# Вы все еще ставите пакеты? Тогда мы идем к вам
1+
# INSTLD и будущее пакетных менеджеров
22

3-
4-
Пакетный менеджер и связанный с ним тулинг - это очень часто штука, стоящая в основе инфраструктуры вокруг популярного современного языка. Требования к нему обычно довольно понятны: он должен давать возможность быстро собрать большой проект из кучи готовых компонентов. В Python с этим все немного неоднозначно. У нас есть стандартный pip, которого хватает для большинства ситуаций. Есть всякие замудренные решения вроде poetry для умных дядек, которые любят выступать на конференциях. Но увы, пока в Python не завезли чего-то настолько простого, чтобы вот прямо написал import в своем коде - и готово. Я решил это исправить.
5-
6-
Расписать: я решил принести в Python немного магии.
7-
8-
Данная статья посвящена библиотеке [instld](https://github.com/pomponchik/instld), которая позволяет вам:
9-
10-
1. В принципе отказаться от такого шага, как установка библиотек.
11-
2. Использовать в одной программе более одного виртуального окружения.
12-
3. Использовать в одной программе несколько версий одной и той же библиотеки.
13-
4. Затащить в свою программу несколько библиотек с конфликтующими зависимостями, которые обычно не получается даже установить одновременно.
14-
5. Определять, какие библиотеки реально используются в проекте, а какие нет.
15-
16-
Установить ее можно командой:
17-
18-
```bash
19-
pip install instld
20-
```
21-
22-
Я предполагаю, что основная ЦА библиотеки - это люди, которые часто пишут скрипты одноразового запуска, например админы. Однако про ее возможности полезно знать всем питонистам, поскольку ситуации, когда нам может понадобиться что-то из перечисленного выше, случаются практически у каждого. Короче, поехали.
23-
24-
25-
## Автоматическая установка пакетов
26-
27-
28-
29-
30-
31-
32-
33-
34-
35-
36-
37-
38-
39-
40-
41-
![Когда выбрал instld](https://disabilitylawfirms.org/files/2019/09/AdobeStock_279551710.jpg)
3+
Год от года программы продолжают раздуваться. На хабре уже есть тысячи обличительных статей на эту тему, но что, если мы перестанем с этим бороться, примем неизбежное и начнем получать удовольствие?

instld/cli/main.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ def push(self, line):
117117

118118
else:
119119
builtins.__import__ = import_wrapper
120-
spec = importlib.util.spec_from_file_location('kek', os.path.abspath(python_file))
120+
spec = importlib.util.spec_from_file_location('__main__', os.path.abspath(python_file))
121121
module = importlib.util.module_from_spec(spec)
122122
sys.modules['__main__'] = module
123123
if sys.platform.lower() in ('win32',):

pyproject.toml

+5-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ build-backend = 'setuptools.build_meta'
44

55
[project]
66
name = 'instld'
7-
version = '0.0.24'
7+
version = '0.0.25'
88
authors = [
99
{ name='Evgeniy Blinov', email='zheni-b@yandex.ru' },
1010
]
@@ -33,6 +33,10 @@ classifiers = [
3333
[project.scripts]
3434
instld = 'instld.cli.main:main'
3535

36+
[tool.mutmut]
37+
paths_to_mutate="instld"
38+
runner="pytest"
39+
3640
[project.urls]
3741
'Source' = 'https://github.com/pomponchik/instld'
3842
'Tracker' = 'https://github.com/pomponchik/instld/issues'

requirements_dev.txt

+1
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,4 @@ pytest-timeout==2.1.0
77
contextif==0.0.3
88
ruff==0.0.290
99
pre-commit
10+
mutmut==2.4.4

tests/cli/test_cli.py

+19
Original file line numberDiff line numberDiff line change
@@ -159,3 +159,22 @@ def test_install_package_from_another_repository_only_command():
159159

160160

161161
os.remove(script)
162+
163+
164+
def test_run_script_and_check_the___name__():
165+
strings = [
166+
'print(__name__)',
167+
]
168+
169+
script = os.path.join('tests', 'cli', 'data', 'main.py')
170+
with open(script, 'w') as file:
171+
file.write('\n'.join(strings))
172+
173+
for runner in (subprocess.run,):
174+
result = runner(['instld', script], stdout=subprocess.PIPE, stderr=subprocess.PIPE, bufsize=100, universal_newlines=True)
175+
176+
result.check_returncode()
177+
178+
assert result.stdout == '__main__\n'
179+
180+
os.remove(script)

0 commit comments

Comments
 (0)