运行已安装的脚本时出现Python导入错误

运行已安装的脚本时出现Python导入错误,python,import,installation,package,Python,Import,Installation,Package,由于一些导入问题,我在运行已安装的python脚本时遇到一些问题 我有一个包结构,如下所示: MANIFEST.in setup.py bin/opal.py bin/opal/ /__init__.py /__init__.pyc /core.py /core.pyc /io.py /file.py /import_limesurvey.py /dictionary.py /io.pyc /importer.pyc

由于一些导入问题,我在运行已安装的python脚本时遇到一些问题

我有一个包结构,如下所示:

MANIFEST.in
setup.py
bin/opal.py
bin/opal/
   /__init__.py
   /__init__.pyc
   /core.py
   /core.pyc        
   /io.py
   /file.py
   /import_limesurvey.py
   /dictionary.py
   /io.pyc
   /importer.pyc
   /data.py
   /rest.py
rest.py中有一个类:

class OpalRestCommand:
  ...
opal.py文件以以下方式使用此模块:

import opal.rest
...
restCmd = opal.rest.OpalRestCommand()
这是设置定义:

...
setup_args = get_kw(
    name=PACKAGE_NAME,
    version=VERSION,
    author=AUTHOR,
    author_email=AUTHOR_EMAIL,
    maintainer=MAINTAINER,
    maintainer_email=MAINTAINER_EMAIL,
    url=URL,
    license=LICENSE,
    description=DESCRIPTION,
    long_description=DESCRIPTION_LOG,
    platforms=PLATFORMS,
    packages = ['opal', 'opal.protobuf']
    package_dir = {'opal': 'bin/opal'}
    scripts=['bin/opal.py']
)

...

if __name__ == '__main__'
   # do some manipulation with argv
   apply(setup, (), setup_args)
当我在客户机(MAC)上安装此软件并运行opal.py命令时,总是会出现以下错误:

 ImportError: No module name rest
但是,如果我创建了一个使用rest模块的测试程序,我就不会有导入问题。我是Python的新手,我不知道我是否应该为安装的脚本做一些特殊的事情!我假设opal.py脚本应该以与测试程序相同的方式找到我的rest模块

任何帮助都将不胜感激


干杯。

我在自己的项目上花了一些时间来解决这个问题,然后才意识到我没有正确地遵守python导入路径

当您正在运行的脚本的名称与命名空间的根匹配时,将出现命名空间问题。opal.py与opal/init.py冲突。这甚至可能发生在您使用setuptools时

假设SITEPACKAGES=/usr/lib/pythonX.Y/site-packages,您的包将安装在$SITEPACKAGES/opal-$version.egg中,脚本将安装在$SITEPACKAGES/opal-$version.egg/egg-INFO/bin/opal.py中,并在/usr/local/bin中添加一个文件,加载放置在egg-INFO/bin/中的脚本。加载该脚本时,出现了一个小问题

python路径将包括$SITEPACKAGES/opal-$version.egg/egg-INFO/bin/。当导入器尝试导入opal中的任何内容时,它将导入您正在运行的脚本,而不是$SITEPACKAGES/opal-$version.egg/opal/中的模块。这是因为脚本名称与包中实现的命名空间之间存在冲突


您的包的名称空间需要更改,或者命令行脚本名称需要更改。

您的
opal
目录中是否有
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu.py
文件?是的,我的包文件夹中有'\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu,它安装在Python库文件夹下,opal.py安装在“/usr/local/bin”下。我希望无论opal.py安装在哪里,我都可以像在测试程序中一样访问rest.py。为后续行动干杯;)我想我明白你在做什么了。我建议您将您的
opal.py
保存在
opal
目录中,并使用setuptools(或分发)。这可能会解决这个问题。否则,我很难诊断,因为您没有显示整个
设置
调用,或者您的整个文件夹布局(例如
\uuuu init\uuuu.py
)被排除在外。您是否可以编辑您的帖子以包含更多的
setup.py
脚本和目录内容?