Python安装程序在自己的目录中运行脚本
我有这样的结构Python安装程序在自己的目录中运行脚本,python,installation,directory,setup.py,entry-point,Python,Installation,Directory,Setup.py,Entry Point,我有这样的结构 src/ setup.py my_folder/ my_script.py my_data.json My.py文件使用来自My_data.json的数据,它用路径My_data.json简单地指向它,因为它紧挨着它?是的,当我通过python my_script.py正常运行它时,它可以正常工作,但当我试图通过安装文件创建它并使用一些别名运行它时,它显然是从/src目录运行的,它看不到我的my_data.json
src/
setup.py
my_folder/
my_script.py
my_data.json
My.py
文件使用来自My_data.json
的数据,它用路径My_data.json
简单地指向它,因为它紧挨着它?是的,当我通过python my_script.py
正常运行它时,它可以正常工作,但当我试图通过安装文件创建它并使用一些别名运行它时,它显然是从/src
目录运行的,它看不到我的my_data.json
文件,因为它应该指向我的文件夹/my_data.json
。当我打印os.getcwd()
时,我看到my_script.py
是从/src
目录运行的,这有点奇怪。。。
我的设置如下所示:
setup(
name='main',
entry_points={
'console_scripts': [
'my_alias = my_folder.my_script:main'
],
},
include_package_data=True,
packages=find_packages()
)
您知道如何强制在他的目录而不是安装程序所在的目录中运行我的脚本吗?如果您可以避免的话,我强烈建议您避免移动到packages目录中,但类似于:
import os
os.chdir(os.path.dirname(os.path.abspath(__file__)))
可能会有用
如果您只需要获取模块中包含的资源,可以在my_脚本中执行以下操作:
import json
import pkg_resources
raw = pkg_resources.resource_string(__name__, 'my_data.json')
data = json.loads(raw)
pkg_resources.resource_字符串以bytestring的形式返回my_data.json的内容。如果您希望能够分别在python中或通过子流程将它们作为文件打开,还可以使用.resource_stream和.resource_filename方法。这使您能够与zip_安全环境兼容,这可能对您有用,也可能对您不有用,这取决于您正在做什么
我不确定这在技术上是否需要,但我发现有时安装脚本无法很好地自动将数据文件添加到包中,需要一些手动干预,如以下所示:
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()
)
尝试添加
'my\u alias=my\u folder.my\u script:main'
到'my\u alias=../my\u folder.my\u script:main'
嗯,它的语法不正确,我认为它不会这样工作,因为在这种情况下它指向了错误的目录。答案非常类似。现在,我必须去我所有的“主/脚本”并更改使用的路径。虽然很少做服务,这可能依赖于某种类型的文件,但我认为这不是我想要做的。我希望在不影响其逻辑的情况下运行这些服务。