【问题标题】:accessing files after setup.py installsetup.py 安装后访问文件
【发布时间】:2010-06-06 20:17:05
【问题描述】:

我正在开发一个 python 应用程序,并且有一个关于对其进行编码的问题,以便在用户通过 setup.py install 或类似方法将它安装到他或她的机器上后它仍然可以工作。

在我的一个文件中,我使用以下内容:

file = "TestParser/View/MainWindow.ui"
cwd = os.getcwd()
argv_path = os.path.dirname(sys.argv[0])
file_path = os.path.join(cwd, argv_path, 文件)

为了得到MainWindow.ui的路径,当我只知道相对于主脚本位置的路径时。无论我从哪里调用主脚本,这都有效。

问题是用户在他或她的机器上安装应用程序后,相对路径不同,所以这不起作用。我可以使用__file__,但是根据this,py2exe 没有__file__

是否有实现此目的的标准方法?还是更好的方法?

编辑:

我是否应该担心 py2exe 而只使用__file__?我没有立即使用 py2exe 的计划,但我希望了解在这种情况下访问文件的正确方法。

【问题讨论】:

  • 也许我遗漏了一些东西,但为什么您的安装程序不将 TestParser/* 复制到与其他所有内容相同的位置?只要所有路径都是“相对”的,无论应用程序位于何处,相对路径都应该有效 =)
  • @Dan McDougall 我还在学习 python 的 setup.py 和朋友,所以我可能会遗漏一些东西,但是脚本安装在 bin 目录中,而模块存储在 lib 下。因此,它是与其他所有内容分开存储的命令行脚本。我假设有一些标准的方法来设置我不知道的项目分布。

标签: python file py2exe setup.py


【解决方案1】:

对于 setup.py,从来没有一个简单的答案适用于所有场景。 Setup.py 是一个巨大的 PITA,用于处理不同的安装过程(例如,“setup.py install”、py2exe、py2app)。

例如,在我的应用程序中,我有以下代码来查找应用程序所需的文件:

def getHome():
  if hasattr(sys, "frozen"):
    if sys.platform == "darwin": # OS X
      return os.path.join(os.path.dirname(os.path.dirname(sys.executable)), "Resources")
    return os.path.dirname(sys.executable)
  else:
    return os.path.dirname(__file__)

为使用 py2exe 和 py2app 创建的应用设置“冻结”。

所以要回答你的问题,请使用__file__,不要担心 py2exe。如果您需要使用 py2exe,则可能无论如何都需要创建一个特殊情况。

【讨论】:

    猜你喜欢
    • 2014-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-23
    • 2011-01-13
    相关资源
    最近更新 更多