Depende do que você busca, mas a opção mais flexível é usar o empacotamento do Python mesmo.
Vai fazer seu programa se integrar melhor em ambientes python de terceiros, vai facilitar automações e controle de versão, vai ajudar com manutenção mais saudável de dependências, se por acaso você use Cython ou algum setup mais complexo, você vai ter menos dor de cabeça, é amigável com multiplataforma, etc… E bom, é o bom e velho e completo pip, você pode distribuir no pypi, em forma de pacotes, zip, vai ser possível integrar bem com anaconda, pyenv, jupyter, facilitar a integração com o power bi já que você podera integrar a scripts, dentre outros ambientes exóticos, etc.
De uma olhada na documentação oficial no pypi sobre como usar o setuptools
No Documentação oficial do setuptools:
https://setuptools.pypa.io/en/latest/
Mas basicamente você vai criar um arquivo setup.py
na raiz do seu projeto e configurar nesse arquivo as dependências, nome, versão, diretórios de recurso, etc… Depois vai poder fazer coisas como:
python setup.py install
# vai instalar o projeto junto com os seus outros pacotes globalmente,
# ou no env que você tem carregado.
python setup.py sdist --formats=zip
# pip install ...zip
# no diretório do projeto ...
pip install
Geralmente os projetos usam um requirements.txt
para os projetos, e puxam para dentro do setup.py
, assim qualquer um contribuindo pode simplesmente usar pip install requirements.txt
… Você pode dessa forma separar dependências de produção das dependências de desenvolvimento que não deve ir junto do seu pacote, e assim vai…