Python打包问题:没有名为steamcloud的模块

时间:2015-04-30 18:16:48

标签: python python-2.7

附件是一个zip文件,其中包含我遇到问题的文件:https://www.dropbox.com/s/2btesdznqevjhz7/airship-pypa.zip?dl=0

基本上我有三个子目录:airshipairship.icloudairship.steamcloud。每个文件都有一个setup.py文件和一个airship子目录,以及包含正确文件的相应子目录,例如airship.icloud/airship/icloud/airship.icloud.py。我在所有这三个目录中都运行了sudo pip install -U .pip list显示了所有安装的三个软件包。但是,当我尝试运行airship(输入点为airship/airship/__init__.py)时,无法导入steamcloud包:

Traceback (most recent call last):
  File "/usr/local/bin/airship", line 9, in <module>
    load_entry_point('airship==1.1', 'console_scripts', 'airship')()
  File "/Library/Python/2.7/site-packages/airship/__init__.py", line 4, in main
    airship.sync()
  File "/Library/Python/2.7/site-packages/airship/airship.py", line 21, in sync
    module = importlib.import_module('.' + modulename, 'airship')
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/importlib/__init__.py", line 37, in import_module
    __import__(name)
ImportError: No module named steamcloud

相关代码:

modules = {'steamcloud': None, 'icloud': None}
modulenum = 0

for modulename in modules:
    # try:
        module = importlib.import_module('.' + modulename, 'airship')
        if module.init():
            print(modulename + ' was imported')
            modules[modulename] = module
            modulenum += 1
    # except:
        # pass

try语句是指用户没有安装相关软件包,但已被注释掉以进行调试的可能性,因为已添加了print语句。

我可以确认/Library/Python/2.7/site-packages/airship/steamcloud/airship.steamcloud.py存在并且代码正确。

iCloud模块加载正常,为什么不是Steam云模块?

分支问题:是否有更好的方法可以在不执行try的情况下检查是否已安装软件包?

1 个答案:

答案 0 :(得分:0)

您不应在Python文件和目录的名称中加点。这让人感到困惑。

Python不会查找名为/Library/Python/2.7/site-packages/airship/steamcloud/airship.steamcloud.py的文件。如果我正确理解您的代码和错误,它正在寻找名为/Library/Python/2.7/site-packages/airship/steamcloud.py的文件。