Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Atualizar requerimentos do Python #1684

Closed
hildogjr opened this issue Oct 16, 2023 · 15 comments
Closed

Atualizar requerimentos do Python #1684

hildogjr opened this issue Oct 16, 2023 · 15 comments
Assignees
Labels
bug Something isn't working

Comments

@hildogjr
Copy link

Descrição
A instalação do pacote em linguagem Python trás como dependências versões específicas das bibliotecas, mesmo usando a biblioteca basedosdados dentro de um ambiente de desenvolvimento, esta restrição acaba por entrar em conflito com as restrições de outras bibliotecas.

Um exemplo disso é a biblioteca pandas==1.3.5 e numpy==1.21.5, sendo que a versão estável atual para Pandas é 2.1.1 e para Numpy é 1.26.1. Pandas>=2 é necessário para instalação de outros pacotes de manipulação de dados no mesmo ambiente de desenvolvimento.

Comportamento esperado / proposta
Atualização do arquivo de requerimentos de instalação setup.py para restrições do tipo >= e não estritamente == conforme branch https://github.com/hildogjr/mais/tree/python-requeriments.

@hildogjr hildogjr added the bug Something isn't working label Oct 16, 2023
@HenriqueAJNB
Copy link

Esse bug já foi corrigido? @crislanealves @JoaoCarabetta @d116626

@hildogjr
Copy link
Author

Me parece que os requerimentos foram estabelecidos através de pip freeze > requirements.txt.

Em minha visão, isso torna a biblioteca muito restritiva para instalação, visto que ela não é para uma aplicação final, mas para exploração do dado ainda.

@HenriqueAJNB
Copy link

@hildogjr, concord contigo. E usando o pip freeze ainda gera outro problema: trazer como dependência tudo que está instalado no ambiente, mas não necessariamente sendo usado de fato no projeto.

Para fins de controle de dependência, sugiro usar 100% o poetry. Ele tem essa flexibilidade que você comentou.

@crislanealves
Copy link
Member

Esse bug já foi corrigido? @crislanealves @JoaoCarabetta @d116626

Não, não. Quer seguir com esse? Manda bala!

@hildogjr
Copy link
Author

Para fins de controle de dependência, sugiro usar 100% o poetry. Ele tem essa flexibilidade que você comentou.

Será que o arquio requirements-dev.txt está, inclusive, listando dependências que não precisamos em tempo de execução da biblioteca, visto que ele é propositalmente chamado "dev". É que este é o único arquivo de requerimentos que o setup.py usa.

@HenriqueAJNB
Copy link

HenriqueAJNB commented Oct 26, 2023

@hildogjr

Na verdade as dependências estão bem confusas. Tem várias dependências espalhadas:

  • pyproject.toml na raiz do projeto -> só tem dependência do mkdocs e nenhuma pra rodar o projeto de fato.
  • python-package/pyproject.toml -> este usando uma versão antiga do poetry>=1.2 (poetry está na 1.6)
  • python-package/requirements-dev.txt -> Aqui de fato tem várias dependências do ambiente virtual que não são de fato importadas/usadas no projeto.
  • Há mistura do setup.py com poetry, o que também confunde mais ainda no setup do projeto e das dependências.

E eu reparei também que o projeto tem várias coisas fixas para Linux/MacOS. Um exemplo abaixo:

Entre na pasta local do repositório usando cd mais/ e suba o ambiente localmente:

make create-env
. .mais/bin/activate
cd python-package/
python setup.py develop
REPO=$(shell basename $(CURDIR))

create-env:
	python3 -m venv .$(REPO);
	. .$(REPO)/bin/activate; \
			pip3 install --upgrade  -r python-package/requirements-dev.txt; \
			python python-package/setup.py develop;

O comando sugerido acima só funciona em Linux/MacOS, não funciona no Windows. E porque usar o venv + setup.py se o projeto usa poetry que gerencia dependências e ambiente virtual ao mesmo tempo?

Dá pra melhorar muito essa parte do setup pra ser independente de sistema operacional, mas seria outra issue.

O que eu tentei fazer?

Comecei um ambiente virtual novo do zero, sem nenhuma biblioteca, e fui instalando uma a uma conforme os testes foram falhando por ModuleNotFoundError. Eu consegui criar o ambiente virtual com todas as dependências, mas falhou quase todos os testes.

============================================================================== short test summary info =============================================================================== 
FAILED python-package\tests\test_cli.py::test_cli_dataset_create - AssertionError: assert b'Datasets `pytest` and `pytest_staging` were created in BigQuery' in b''
....
FAILED python-package\tests\test_cli.py::test_cli_dataset_publicize - AssertionError: assert b'Dataset `pytest` became public!' in b''
FAILED python-package\tests\test_cli.py::test_cli_dataset_delete - AssertionError: assert b'Datasets `pytest` and `pytest_staging` were deleted in BigQuery' in b''
========================================================= 53 failed, 2 passed, 17 skipped, 18 warnings, 67 errors in 45.96s ==========================================================

Tentei também jogar todas as dependências do python-package/pyproject.toml para o pyproject.toml da pasta raiz, mas obtive os mesmos erros dos testes. Talvez seja erro do projeto ao rodar no Windows de forma geral.

Alguém pode me dar uma luz?

@hildogjr
Copy link
Author

Você verificou se os arquivos em tests/ usam bibliotecas extras? É comum alguns projetos terem o requirements.txt e o requirements-dev.txt com as dependências extras para rodas os testes.

Com esta sua primeira fase já está sendo possível rodas um "simples" import e query de dados? (sem rodas os testes)

@HenriqueAJNB
Copy link

HenriqueAJNB commented Oct 26, 2023

Você verificou se os arquivos em tests/ usam bibliotecas extras?

Sim, basicamente com o ambiente virtual vazio, eu fui rodando os testes e instalando cada biblioteca que gerava erro de ModuleNotFoundError.

É comum alguns projetos terem o requirements.txt e o requirements-dev.txt com as dependências extras para rodas os testes.

Sim, inclusive o poetry tem uma separação de dependências da biblioteca em si e de desenvolvimento, que ficam em um grupo separado em [tool.poetry.group.dev.dependencies], resolvendo essa questão de ter 2 arquivos requirements.txt e requirements-dev.txt.

Mas como não conheço o projeto a fundo, não sei distinguir quais são do projeto em si e quais são de desenvolvimento.

Com esta sua primeira fase já está sendo possível rodas um "simples" import e query de dados?

Vou fazer esse teste e retorno aqui.

@gabriel-milan
Copy link
Member

Bom dia pessoal!

Essas questões de dependências foram endereçadas para a versão 2.x do pacote, que está na branch v2.0.0 e no PR #1678. Como já existe esse esforço de aprimorar o gerenciamento de dependências, penso que seria excelente se pudessem validar, nos ambientes de vocês, as pré-releases da v2. A mais recente no momento de escrita dessa mensagem é a 2.0.0b15. Só queria pedir também, se possível, que lessem o changelog (está no PR mencionado) para endereçar eventuais extras que queiram instalar.

@HenriqueAJNB
Copy link

HenriqueAJNB commented Oct 27, 2023

@gabriel-milan, obrigado por situar. Não sabia que essa issue já estava endereçada na release nova.

Eu achei que ficou bem mais claro agora a questão das dependências, todas centradas em um único pyproject.toml, com escopos e grupos bem definidos.

Consegui instalar o ambiente virtual sem problemas. O único ponto que tive foi ao rodar os testes:

ImportError while loading conftest 'C:\Users\Henrique\Documents\area de trabalho\pessoal\repos\mais\python-package\tests\conftest.py'.
tests\conftest.py:11: in <module>
    from ruamel import yaml as ryaml
E   ModuleNotFoundError: No module named 'ruamel'

E eu conferi algumas vezes pra verificar se o ambiente virtual estava ativo e se essa dependência estava instalada nele, e de fato estava.

$ poetry show ruamel.yaml
 name         : ruamel-yaml
 version      : 0.17.40
 description  : ruamel.yaml is a YAML parser/emitter that supports roundtrip preservation of comments, seq/map flow style, and map key order

dependencies
 - ruamel.yaml.clib >=0.2.7

required by
 - semgrep >=0.16.0,<0.18

Juro que não sei que acontece com essa biblioteca em específico.

A questão do ambiente virtual ficou bem mais fácil de realizar o setup inicial inclusive para desenvolvedores contribuidores.

E ainda fica a sugestão de centralizar 100% das dependências, ambientes virtuais e publicação com o poetry, como disse acima, atualizando inclusive a forma como cria o ambiente virtual citada no CONTRIBUTING.md.

Há mistura do setup.py com poetry, o que também confunde mais ainda no setup do projeto e das dependências.
E eu reparei também que o projeto tem várias coisas fixas para Linux/MacOS. Um exemplo abaixo:

Entre na pasta local do repositório usando cd mais/ e suba o ambiente localmente:
...
O comando sugerido acima só funciona em Linux/MacOS, não funciona no Windows. E porque usar o venv + setup.py se o projeto usa poetry que gerencia dependências e ambiente virtual ao mesmo tempo?

@gabriel-milan
Copy link
Member

O único ponto que tive foi ao rodar os testes

Os testes ainda precisam ser todos revistos, muitos deles já não fazem mais sentido para a versão 2.

E ainda fica a sugestão de centralizar 100% das dependências, ambientes virtuais e publicação com o poetry

A ideia é essa sim, se não me engano a versão 2 deve conter somente o pyproject.toml.

atualizando inclusive a forma como cria o ambiente virtual citada no CONTRIBUTING.md.

Esse é um ponto bem lembrado, será necessário revisar a documentação antes de lançar efetivamente essa versão do pacote.

@HenriqueAJNB
Copy link

@gabriel-milan, obrigado pelo feedback. Tem alguma atuação nesta issue em específico (arrumar as dependências) que necessite de ajuda?

E sobre os outros tópicos que você mencionou de limpeza dos testes e de ajustes na documentação, seria legal ter issues também. E caso alguma delas já esteja sendo desenvolvida por alguém, sugiro deixar claro pra quem é de fora pra não deixar espaço para esforços repetidos e desnecessários.

@gabriel-milan
Copy link
Member

Tem alguma atuação nesta issue em específico (arrumar as dependências) que necessite de ajuda?

Isso já está resolvido no PR

@gabriel-milan
Copy link
Member

seria legal ter issues

feito

@gabriel-milan
Copy link
Member

Dado que problemas relacionados estão sendo tratados em #1691 e #1692, essa issue pode ser fechada.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
Status: Concluído
Development

No branches or pull requests

6 participants