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

我应该手动将pth文件添加到site-packages文件夹中吗? 我尝试了一下(将内容放入包中的内容为/home/blah/lib/python),并且导入了mytest,效果很好。 不应该自动完成吗? 还是我错过了什么?

编辑:

安装输出:

16ago@dellbert:~/py/mytest-0.1$ python setup.py install --home=/home/ago/py/

running install

running build

running build_py

copying src/mytest/mytest.py -> build/lib.linux-x86_64-2.6/mytest

running build_scripts

copying and adjusting src/main.py -> build/scripts-2.6

running install_lib

copying build/lib.linux-x86_64-2.6/mytest/mytest.py -> /home/ago/py//lib/python/mytest

byte-compiling /home/ago/py//lib/python/mytest/mytest.py to mytest.pyc

running install_scripts

copying build/scripts-2.6/main.py -> /home/ago/py//bin

changing mode of /home/ago/py//bin/main.py to 755

running install_egg_info

Removing /home/ago/py//lib/python/mytest-0.1.egg-info

Writing /home/ago/py//lib/python/mytest-0.1.egg-info

和setup.py:


11from distutils.core import setup

setup(name='mytest',

description='test',

author='Ago',

author_email='email',

version='0.1',

package_dir={'mytest': 'src/mytest'},

packages=['mytest'],

scripts=['src/main.py']

)

资料夹结构:

-src:

-mytest:

__init__.py

mytest.py

main.py

setup.py

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

好吧,目前我已将mytest.pth文件添加到site-packages中,其内容为homeagopylibpython。 但是,如果有人有解决方案,为什么我的模块/软件包不能用于python setup.py install,我仍然会感兴趣。 谢谢!

我希望看到python setup.py install --home=/home/blah命令的完整输出。如果该目录不存在,或不支持pth文件,则应收到某种警告或错误,我相信安装实际上会失败。

查看setup.py文件也将有所帮助,因为可以在其中放置会导致损坏的内容。

谢谢回复!我修改了我的问题,并添加了您所问的内容。

奇怪的。如果我说的对,这是一个错误,但是您给install命令指定的路径后面有一个斜线,表示distutils不会规范化,我想知道这是否会使事情中断。您是否可以尝试不使斜杠结尾,所以命令看起来像--home=homeagopy而不是--home=homeagopy?

试了一下,没有结尾的斜线。还是一样。

您在名称空间中有一个额外的层。它创建了一个mytest文件夹,并将您的mytest模块放在其下面,这样诸如import mytest.mytest之类的东西可能会起作用,或者从mytest中导入mytest但不会导入mytest。这是输出中的关键行:byte-compiling homeagopylibpythonmytestmytest.py to mytest.pyc -发生这种情况是因为您将mytest作为软件包而不是模块安装了,并且没有更改init.py来公开下面的模块,而没有从软件包中显式请求它。

我以某种方式错过了您的评论。但是我已经尝试了不同的组合。我知道,我有mytest.mytest,这是我的意图。但是即使在这种情况下,我也应该能够import mytest,对吗?无论如何,import mytest.mytest给了我同样的importerror。

当我将pth文件添加到site-packages时,它允许我执行import mytest,但没有让我执行from mytest import mytest或import mytest.mytest,这让我觉得很奇怪。但是给定的脚本必须仅安装到一台服务器中。因此,我想这一次添加此pth文件不是问题。

病重回最后的评论。现在,它可以让我执行import mytest.mytest。因此,只需通过install自动将模块的路径放入pythons安装即可。

看来python至少在Unix和Windows环境中统一了参数。查看今天的python参考(https://docs.python.org/2/install/index.html,2017年12月),它表明在两个OS中都可以使用--prefix=。请参阅参考资料的"备用安装:Unix(前缀方案)"和"备用安装:Windows(前缀方案)"部分。我只是用Oct2Py(八度到Python的转换器)进行了测试,这很难通过easy_install或pip进行安装,但是这种方式做得很好。

然后,您的python包将位于(假设您使用Python 2.7)/lib/python2.7/site-packages或/lib/python2.7/dist-packages中。