Я настоятельно рекомендую избегать перехода в каталог пакетов, если вы можете этого избежать, но что-то вроде:
import os
os.chdir(os.path.dirname(os.path.abspath(__file__)))
, вероятно, сработает.
, если вам просто нужно получить ресурсов, которые вы включили в свой модуль, вы можете сделать что-то вроде этого в my_script:
import json
import pkg_resources
raw = pkg_resources.resource_string(__name__, 'my_data.json')
data = json.loads(raw)
pkg_resources.resource_string возвращает содержимое my_data. json в виде байтовой строки. Существуют также методы .resource_stream и .resource_filename, если вы хотите иметь возможность открывать их как файлы в пределах python или с подпроцессом соответственно. Это дает вам совместимость со средами zip_safe, которые могут быть полезны или не полезны в зависимости от того, что вы делаете.
Я не уверен, требуется ли это технически, но иногда я обнаруживаю, что сценарии установки не поиграйте с автоматическим добавлением файлов данных в ваш пакет, и требуется некоторое ручное вмешательство, например следующее:
setup(
name='mypackage',
entry_points={
'console_scripts': [
'my_alias = mypackage.my_script:main'
],
},
package_data={'mypackage': ['*.json']}, # Important addition
include_package_data=True,
packages=find_packages()
)