我不確定是否有可靠的方法來確定這一點。事實上,我會建議你不要這樣測試路徑,因爲你可能遇到不同的操作系統或環境中的特殊情況。
有幾個備選方案,我建議改爲:
1)如果這是一個命令行工具,我建議允許通過一個命令行標誌,自定義配置文件配置的加載:
from argparse import ArgumentParser
import sys
import json
parser = ArgumentParser(description='...')
parser.add_argument('-c', '--config', default='config.json')
def main(argv):
args = parser.parse_args(argv)
print('loading config file:', args.config)
with open(args.config, 'r') as config:
config = json.loads(config.read())
print('loaded config', config)
# TODO do something with the config
if __name__ == '__main__':
main(sys.argv[1:])
運行帶:python3 test1.py -c config-dev.json
2)如果這不是一個CLI應用程序,你可以實現通過USI類似的事情NG環境變量:
與
import os
import json
os.environ.get('CONFIG', 'config.json')
def main():
config_file = os.environ.get('CONFIG', 'config.json')
print('loading config file:', config_file)
with open(config_file, 'r') as config:
config = json.loads(config.read())
print('loaded config', config)
# TODO do something with the config
if __name__ == '__main__':
main()
運行:CONFIG=config-dev.json python3 test2.py
,或:
export CONFIG=config-dev.json
python3 test2.py
你也可以做一個shell腳本,以幫助設置你的開發環境,我們稱之爲customenv
:
source env/bin/activate
export CONFIG=config-dev.json
然後你可以使用這個文件來激活開發環境:
source customenv
3)如果你真的想在你的開發環境代碼的特殊情況下,可以通過環境變量也指定此:
import os
is_dev_mode = 'MY_APP_DEV' in os.environ and os.environ['MY_APP_DEV'] == '1'
if is_dev_mode:
print('dev mode!')
運行與MY_APP_DEV=1 python3 test3.py
,或:
export MY_APP_DEV=1
python3 -m test3.py
4)更多定製:
import os
app_mode = os.environ.get('MY_APP_MODE', 'prod')
print(app_mode)
聽起來不錯;-)'pkg_resources.working_set'軟件包的名稱('import pkg_name')或庫名稱(如setup.py中的'name =「lib_name」)的密鑰? –
這些鍵最終會成爲「規範化」的軟件包名稱(所以對於'yaml'你會尋找'pyyaml',對於'pre_commit'你會尋找'pre-commit')。規範化規則遵循https://www.python.org/dev/peps/pep-0440/(PEP440)(儘管通常它最終是'.replace('_',' - ')。lower()') –
@LaurentLAPORTE你對這個問題還有其他問題嗎? –