繁体   English   中英

如何将python包安装到/usr/local/bin?

[英]How do I install a python package to /usr/local/bin?

我正在尝试在我的 ubuntu 上安装一个 python 包。我正在尝试通过我编写的安装脚本安装它。 setup.py 脚本如下所示:

    from setuptools import setup

try:
    from setuptools import setup
except ImportError:
    from distutils.core import setup

setup(
    name = 'pyduino',
    description = 'PyDuino project aims to make python interactive with hardware particularly arduino.',
    url = '###',
    keywords = 'python arduino',
    author = '###',
    author_email = '###',
    version = '0.0.0',
    license = 'GNU',
    packages = ['pyduino'],
    install_requires = ['pyserial'],
    classifiers = [

        # How mature is this project? Common values are
        #   3 - Alpha
        #   4 - Beta
        #   5 - Production/Stable
        'Development Status :: 3 - Alpha',
        'Intended Audience :: Developers',
        'Topic :: Software Development :: Build Tools', 
        'Programming Language :: Python :: 2',
        'Programming Language :: Python :: 2.6',
        'Programming Language :: Python :: 2.7',
        'Programming Language :: Python :: 3',
        'Programming Language :: Python :: 3.3',
        'Programming Language :: Python :: 3.4',
        'Programming Language :: Python :: 3.5',
    ],
    scripts=['pyduino/pyduino.py'],
)

包安装在 /usr/local/bin 目录中。但是当我在 /usr/local/bin 之外导入模块时,出现导入错误。我尝试将路径更改为 /usr/local/bin 并且它工作正常并且导入错误没有't发生。如何安装包以便可以在任何目录中导入模块? 提前致谢...

尝试使用 pip 安装您的软件包

pip install --install-option="--prefix=$PREFIX_PATH" package_name

如此处所述使用 pip 将 Python 包安装到不同的目录中? 我会建议阅读什么是 1. pip 2. virtualenv

祝你好运:)

编辑:我发现这个包是用 pip 安装的,比如:

pip install --install-option="--prefix=/usr/local/bin" pyduino_mk

目前,您正在使用scripts标签来安装您的 Python 代码。 这会将您的代码放在/usr/local/bin ,它不在PYTHONPATH

根据文档,当您想安装可执行脚本(您想从命令行调用的东西)时使用scripts 否则,您需要使用packages

我的方法是这样的:

  • 在库中安装pyduino/pyduino.py类似packages=['pyduino']
  • 创建一个能够调用已安装脚本的包装器(shell 或 python)并通过scripts=[...]

为您的模块使用packages标签会将其安装在/usr/local/lib/python... ,它位于PYTHONPATH 这将允许您使用import pyduino.pyduino.*类的内容import pyduino.pyduino.*脚本。

对于包装脚本部分:

如果脚本是从命令行触发的,最佳做法是隔离要执行的代码,例如:

def main():
    # insert your code here
    pass

if __name__ == '__main__':
    main()
  • 假设有一个def main()如上所述
  • 在您的树中创建一个目录scripts (与setup.py处于同一级别)
  • 创建一个文件scripts/pyduino
  • scripts/pyduino

     #!/usr/bin/env python from pydiuno.pyduino import main if __name__ == '__main__': main()
  • 在 setup.py 代码中添加 `scripts = ['scripts/pyduino']

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM