Modificando o Python Path Permanentemente com PYTHONPATH
Embora modificar sys.path dentro de um script seja útil para alterações temporárias, você pode querer adicionar um diretório ao Python path para todas as suas sessões Python ou para um projeto específico sem modificar scripts individuais. Isso pode ser alcançado definindo a variável de ambiente PYTHONPATH.
A variável de ambiente PYTHONPATH é uma lista de diretórios que o Python adiciona a sys.path quando ele inicia.
Para definir a variável de ambiente PYTHONPATH para sua sessão atual do terminal, você pode usar o comando export.
Vamos remover a linha sys.path.append() de use_custom_module.py e usar PYTHONPATH em vez disso.
Abra use_custom_module.py no editor do WebIDE e remova as seguintes linhas:
## Get the absolute path to the custom modules directory
custom_modules_path = os.path.join(os.path.dirname(__file__), 'my_custom_modules')
## Add the custom modules directory to sys.path
sys.path.append(custom_modules_path)
O arquivo use_custom_module.py agora deve ter a seguinte aparência:
import sys
import os
## Now you can import my_module
import my_module
message = my_module.greet("LabEx User")
print(message)
## Optional: Print sys.path again to see the added directory
print("\nUpdated sys.path:")
print(sys.path)
Salve o arquivo.
Agora, tente executar o script sem definir PYTHONPATH:
python use_custom_module.py
Você provavelmente obterá um ModuleNotFoundError porque o Python não consegue encontrar my_module.
Traceback (most recent call last):
File "/home/labex/project/use_custom_module.py", line 5, in <module>
import my_module
ModuleNotFoundError: No module named 'my_module'
Agora, vamos definir a variável de ambiente PYTHONPATH no terminal para incluir nosso diretório de módulos personalizados. Certifique-se de estar no diretório /home/labex/project.
export PYTHONPATH="/home/labex/project/my_custom_modules:$PYTHONPATH"
Este comando adiciona /home/labex/project/my_custom_modules ao início da variável PYTHONPATH. O $PYTHONPATH no final garante que quaisquer diretórios existentes em PYTHONPATH sejam preservados.
Agora, execute o script use_custom_module.py novamente na mesma sessão do terminal:
python use_custom_module.py
Você deve ver a saída indicando que o módulo foi encontrado e executado:
Hello, LabEx User from my_module!
Updated sys.path:
['/home/labex/project', '/home/labex/project/my_custom_modules', '/usr/lib/python310.zip', '/usr/lib/python3.10', '/usr/lib/python3.10/lib-dynload', '/home/labex/.local/lib/python3.10/site-packages', '/usr/local/lib/python3.10/dist-packages', '/usr/lib/python3/dist-packages']
Observe que /home/labex/project/my_custom_modules agora está incluído em sys.path porque definimos a variável de ambiente PYTHONPATH.
Definir PYTHONPATH no terminal usando export afeta apenas a sessão atual do terminal. Para tornar a alteração permanente, você normalmente adicionaria o comando export ao arquivo de inicialização do seu shell (por exemplo, ~/.bashrc, ~/.zshrc). No entanto, para este laboratório, defini-lo na sessão atual é suficiente para demonstrar o conceito.