【问题标题】:Pathing with setup.py entry_points使用 setup.py entry_points 进行路径
【发布时间】:2020-12-11 16:20:01
【问题描述】:

不太确定如何解决我的这个问题,但是.. 我是包装和 setup.py 的初学者。我在目录中有一个脚本。

目录:

-root-
--setup.py (setup file in root dir)

-srcdir (dir with src code)
  --script.py (script in srcdir - WITH function main())

-confdir (dir with conf file)
  --config.conf (config itself)

我使用python setup.py bdist_wheel 安装它,然后从 setup.py 文件所在的根目录安装pip install -e .。我的 setup.py 文件包含一个入口点 entry_points={"console_scripts": {"fish=script:main"}}(这意味着我可以使用 cmd 从任何地方调用 fish 并运行 script.py 文件中的 main() 函数)。

现在我有一个问题。从 script.py 文件 - 我正在阅读 config.conf。如果我从任何目录调用fish,我将无法访问配置文件 bcs,我在 script.py 中使用了相对路径。有没有办法不使用绝对路径访问它?

基本上我需要来自我正在运行的脚本的相对路径,而不是我使用 cmd 所在的目录。有什么办法吗?

谢谢!

【问题讨论】:

    标签: python path package setup.py


    【解决方案1】:

    如果配置文件是另一个 Python 模块,您可以简单地导入它:

    from ..confdir import config
    

    但由于它似乎是某种其他类型的文件,您可以使用__file__ 变量来创建相对于script.py 的路径:

    from pathlib import Path
    
    conf_path = Path(__file__).parents[1] / 'confdir' / 'config.conf'
    

    不要忘记在您的MANIFEST.in 中包含config.conf(+ 在setup.py 中使用include_package_data=True)。

    【讨论】:

    • 实际上是conf_path = os.path.join(__file__, '../../confdir/config.conf') bcs __file__ 中的最后一项是文件本身,您需要从中“返回”。不过谢谢你,真的帮助我理解了!
    猜你喜欢
    • 2015-08-11
    • 2013-09-18
    • 1970-01-01
    • 2010-10-23
    • 2014-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-10
    相关资源
    最近更新 更多