簡體   English   中英

帶有用戶包的 py2app

[英]py2app with user packages

我正在做一個小的跨平台 python 項目。 我想將文件擴展名與程序相關聯,因此對於 OSX,腳本似乎必須成為應用程序。 py2app 似乎是完成這項工作的完美工具,但我很難找到有關它的良好文檔。

我的 python 腳本依賴於我編寫的包 ( k.tk ) 並k.tk鏈接到/Library/Python/2.7/site-packages/k/tk (單個文件被符號鏈接到文件夾中 - 該文件夾不是符號鏈接)。

這是我正在使用的 setup.py 腳本:

"""
This is a setup.py script generated by py2applet

Usage:
    python setup.py py2app
"""

from setuptools import setup
import sys

APP = ['randomizer.py']
DATA_FILES = []
OPTIONS = {'argv_emulation': True, 'includes': ['k.tk']}

setup(
    app=APP,
    data_files=DATA_FILES,
    options={'py2app': OPTIONS},
    setup_requires=['py2app']
)

我的設置有兩個問題,我都找到了一個我不喜歡的非常丑陋的解決方法。

第一個問題 - 別名構建

使用python setup.py py2app -A構建時會出現第一個問題。 這應該是通過鏈接到源文件來構建應用程序,以使開發更容易。 但是,當我嘗試運行生成的應用程序時,它說

導入錯誤:沒有名為 k.tk 的模塊

解決方法是將這些行附加到 python 腳本中:

import sys
sys.path.append("/Library/Python/2.7/site-packages/")

這似乎意味着當從應用程序調用 python 環境時,python 環境有問題,但我對 py2app 了解不夠,不知道如何修復它。

第二個問題 - 完整構建

使用python setup.py py2app構建時會出現第二個問題。 這會觸發常規構建並將所有庫復制到應用程序中。 當我運行這個應用程序時,我得到

OSError: [Errno 20] 不是目錄: '[path snipped]/application.app/Contents/Resources/lib/python2.7/site-packages.zip/k'

此處丑陋的解決方法是打開應用程序的文件並將 site-packages.zip 解壓縮到名為 site-packages.zip 的文件夾中。 現在錯誤消息中給出的路徑是一個目錄,應用程序運行良好。

有誰知道如何解決這一問題? 我感到很困惑,我能找到的唯一文檔是this ,這似乎非常有限。

更新

我嘗試將/Library/Python/2.7/site-packages/k目錄復制到項目目錄中。 這修復了別名構建,但不幸的是不是完整構建。

我還嘗試按照 Python 文檔(此處)中的說明正確打包和安裝。 這具有相同的效果。 我感到很沮喪; 為什么它會試圖查看 zip 文件,就好像它是一個文件夾一樣?

更新

我最終編寫了一個構建腳本,該腳本只是用同名目錄覆蓋了 zip。 這解決了問題,但我對解決方案不滿意。

我也開始嘗試使用 py2exe 為 Windows 構建。 在 Windows 中,我遇到了完全相同的問題! 這次 library.zip 已創建,必須解壓縮才能運行程序。 當然,這些程序不只是碰巧有相同的錯誤,但我無法想象為什么他們都會錯誤地期望可以像文件夾一樣訪問 zip 文件。

py2app需要一個單獨的 Python 安裝而不是系統 Python 才能使包工作(我建議使用HomeBrew )。 如果k.tk是一個包含更多模塊的包,您也可以嘗試packages而不是includes

如果由於某種原因上述解決方案不起作用,請嘗試添加一些由open(*, 'r')第三方包打開的 const 文件

將他們想要打開的內容添加到 data_files=[..]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM