setuptools将您的软件包安装在可从 python 访问的位置,即您可以导入它:
import project
当您进行相对导入而不是绝对导入时会出现问题。如果您的main.py
导入config.py
它可以工作,因为它们位于同一目录中。当您将您移动main.py
到另一个位置(例如PATH/usr/bin
环境变量中存在的另一个位置)时,python 尝试从您的包目录而不是从您的包目录导入。解决方案是使用绝对导入:config.py
sys.path
from project import config
现在main.py
是“可移动的”。
我更喜欢的另一个解决方案是使用setuptools提供的自动脚本创建。
而不是将您的代码放在
if __name__ == "__main__":
# here all your beautiful code
声明,将您的代码放在一个函数中(main 可能是一个好名字):
def main():
# put your code here
if __name__ == "__main__": # not needed, just in case...
main()
现在修改你的setup.py
:
setup(
# ...
entry_points = {
"console_scripts": [
# modify script_name with the name you want use from shell
# $ script_name [params]
"script_name = project.main:main",
],
}
)
就这样。安装后setuptools将创建一个包装脚本,该脚本可从 shell 调用并调用您的 main 函数。现在main.py
可以存在于您的项目目录中,您不再需要将其移动到bin/
目录中。请注意,setuptools 会自动将此脚本放在bin/
与安装前缀相关的目录中。
es。
python setup.py install --prefix ~/.local
将您的项目包安装在
~/.local/lib/python<version>/site-packages/<package_name>
和你的脚本
~/.local/bin/<script_name>
所以请确保它~/.local/bin
存在于您的PATH环境中。
更多信息请访问: http: //peak.telecommunity.com/DevCenter/setuptools#automatic-script-creation