python setup.py 指定文件到指定路径_编写 python package 中的 setup.py 文件

引言

之前我们项目组在使用 python 的过程中,经常遇到用 pip install -e . 的方式安装 python package 的情况,这些 package 中都有一个 setup.py 文件,里面指定了 package 的依赖、描述性的信息等。

但是我们从来没有为自己的 package 写过类似的 setup.py 文件。如果需要在程序中调用自己写的 package,一般是设定环境变量 PYTHONPATH 或者在 python 程序中设置 sys.path 来具体指定 package 的搜索路径。如果只是在本地调用自己的 package,路径相对固定,这种方式也没什么问题,如果要将 package 分享给别人甚至分享到 PyPI 上,这种路径设置的方式就有些简陋了。如果我们为 package 编写了 setup.py 文件,那么 package 路径的问题、依赖的问题以及描述性的信息管理就可以交给 pip (package installer for Python) 处理。 用户只需要通过 pip install -e . 的方式安装即可。

在学习编写 setup.py 文件的过程中,我们感觉这篇文章讲解的非常透彻,所以将它的内容整理总结出来,目的是方便以后自己和其他研究人员参考。

一个简单的 package 例子

如果还不太了解 module 和 package 的概念和用法,可以参考 python 官方的 tutorial。

在这里我们先创建一个文件夹 setuppy_tutorial,后边所有的操作都在这个文件夹中进行。

假设在这个文件夹中有一个 package 名为 greeting_pkg,文档路径结构如下:

.

└── greeting_pkg

├── greeting_module.py

└── __init__.py

其中 __init__.py 为空文件,greeting_module.py 文件内容如下:

def greeting_func(name):

print("Hello, ", name)

也就是说,这个 greeting_pkg package 包含一个 module 文件 greeting_module.py,其中的函数 greeting_func 可以打印出输入的名字并问候。

例如,当 greeting_pkg package 处于当前目录时,进入 python 环境,调用 module 并执行其中的函数:

$ python

>>> from greeting_pkg.greeting_module import greeting_func

>>> greeting_func("De Gang")

Hello, De Gang

如果 greeting_pkg package 没有处于当前目录,在调用 module 时就会出现如下路径错误

>>> from greeting_pkg.greeting_module import greeting_func

Traceback (most recent call last):

File "", line 1, in

ModuleNotFoundError: No module named 'greeting_pkg'

python 搜索 module 的路径由 sys.path 决定,可以通过如下命令查看:

>>> import sys

>>> print('\n'.join(sys.path))

/home/automan/pyenv/testsetuppy/lib/python36.zip

/home/automan/pyenv/testsetuppy/lib/python3.6

/home/automan/pyenv/testsetuppy/lib/python3.6/lib-dynload

/usr/lib/python3.6

/home/automan/pyenv/testsetuppy/lib/python3.6/site-packages

(这里用了虚拟环境,名称为 testsetuppy)

显示的路径列表中包括

1. 当前路径 (以空字符串表示)

2. P

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值