Se o caminho estiver apenas apontando para executáveis que você chama, considere a possibilidade de colocar links em locais padrão durante a instalação ( /usr/bin/
ou /usr/local/bin
) e fazer com que o executável descubra de onde eles foram invocados. caminho para qualquer arquivo de dados.
Você usaria o seguinte:
/usr/bin/myprog
/opt/myprog/bin/myprog
/opt/myprog/data/picture_01.img
tem /usr/bin/myprog
um link para /opt/myprog/bin/myprog
e /opt/myprog/bin/
não deve estar no seu $PATH
. Configure o link fazendo sudo ln -s /opt/myprog/bin/myprog
/usr/bin
e tenha em /opt/myprog/bin/myprog
do:
import sys
import os
base_dir = os.path.realpath(sys.argv[0]).rsplit('/bin/', 1)[0]
Para determinar /opt/myprog
dinamicamente em tempo de execução
Se a API python for baseada em algum módulo incluído, certifique-se de que o módulo seja instalado no caminho de pesquisa PYTHONPATH de um python do sistema, então você pode fazer import yourapimodule
em um executável python e usá-lo.
Se esses arquivos de dados puderem ser instalados em qualquer lugar, considere ter um arquivo de configuração que você leu e que poderia ser ~/.config/yourapimodule/config.ini
, ~/.yourapimodule/config.ini
ou ~/.yourapimodule.ini
.¹ (em vez de .ini
, você poderia usar outros formatos como .json
, o que você preferir).
¹ Plug sem vergonha: Se você estiver usando argparse
do Python para lidar com argumentos de linha de comando, dê uma olhada no pacote ruamel.appconfig
, que eu escrevi, configura a configuração para você e permite que você especifique padrões no arquivo de configuração para a análise da linha de comando.