8

我有一个测试设置文件,我制作了一个简单的“hello world”脚本。我有一个名为的包mytest,它有一个功能hello。现在,我有一个非常简单的setup.py. 一切正常,如果我只是运行python setup.py install. 但是,如果我想将 lib 安装到主文件夹 ( python setup.py install --home=/home/blah) 中,则该软件包不再可用(import mytest在 python 中运行给了我ImportError: No module named mytest)。

我应该手动将 pth 文件添加到site-packages文件夹中吗?我试过了(使用 contents /home/blah/lib/python,我的包放在哪里)并且导入mytest工作正常。不应该自动完成吗?还是我错过了什么?

编辑:

安装输出:

ago@dellbert:~/py/mytest-0.1$ python setup.py install --home=/home/ago/py/
运行安装
运行构建
运行 build_py
复制 src/mytest/mytest.py -> build/lib.linux-x86_64-2.6/mytest
运行 build_scripts
复制和调整 src/main.py -> build/scripts-2.6
运行 install_lib
复制 build/lib.linux-x86_64-2.6/mytest/mytest.py -> /home/ago/py//lib/python/mytest
字节编译 /home/ago/py//lib/python/mytest/mytest.py 到 mytest.pyc
运行 install_scripts
复制 build/scripts-2.6/main.py -> /home/ago/py//bin
将 /home/ago/py//bin/main.py 的模式更改为 755
运行 install_egg_info
删除 /home/ago/py//lib/python/mytest-0.1.egg-info
写 /home/ago/py//lib/python/mytest-0.1.egg-info

和 setup.py:

从 distutils.core 导入设置

设置(名称='我的测试',
      描述='测试',
      作者='以前',
      author_email='电子邮件',
      版本='0.1',
      package_dir={'mytest': 'src/mytest'},
      包=['mytest'],
      脚本=['src/main.py']
      )

文件夹结构:

-src:
   -我的测试:
       __init__.py
       我的测试.py
    主文件
安装程序.py

main.py只是一个可执行文件,它导入 mytest 并调用函数来打印 hello world。但我试图import mytest在 python 中运行以查看是否安装了 lib。

4

2 回答 2

1

似乎 python 至少统一了 Unix 和 Windows 环境中的参数。查看今天的 Python 参考资料(https://docs.python.org/2/install/index.html,2017年 12 月),它表明在两个操作系统中您都可以使用--prefix=<head installation path>. 查看参考资料,“备用安装:Unix(前缀方案)”“备用安装:Windows(前缀方案)”部分。我刚刚使用 Oct2Py(Octave-to-Python 转换器)对其进行了测试,使用 easy_install 或 pip 进行安装很麻烦,但这种方式做得很好。

然后,您的 python 包将位于(假设您使用 Python 2.7)<head installation path>/lib/python2.7/site-packages<head installation path>/lib/python2.7/dist-packages.

于 2017-12-20T15:06:42.120 回答
0

我不知道这段代码是否有帮助,我没有测试过。
如果您的路径是/src/lib/

python setup.py install --install-lib /src/lib/
python setup.py install --user --prefix=

或者

import sys
sys.path.append('your-path')
于 2021-10-28T00:23:19.390 回答