2017-10-11 84 views
1

我有一個應用程序,當未傳遞命令行參數時,默認爲文件夾中找到的默認文件./wordlists。這工作正常的主機文件夾,但一旦我運行setup.py install應用程序失去了參考,我不確定爲什麼。Python setuptools - 維護子文件夾中的文本文件引用?

這是我當前的setup.py:

from setuptools import find_packages, setup 


def dependencies(file): 
    with open(file) as f: 
     return f.read().splitlines() 

with open("README.md") as f: 
    setup(
     name="<redacted>", 
     license="<redacted>", 
     description="<redacted>", 
     long_description=f.read(), 
     author="<redacted>", 
     author_email="<redacted>", 
     url="<redacted>", 
     packages=find_packages(exclude=('tests')), 
     package_data={'wordlists': ['*.txt', './wordlists/*.txt']}, 
     scripts=['<redacted>'], 
     install_requires=dependencies('requirements.txt'), 
     tests_require=dependencies('test-requirements.txt'), 
     include_package_data=True) 

如前所述,我可以使用運行在我的目錄中的應用:

python ./VHostScan.py -t <target> 

,然後它會默認爲單詞表:

./wordlists/virtual-host-scanning.txt 

但是在使用./setup.py install然後試圖運行應用程序它l鏈接到單詞表。

這就是我試圖添加到我的setup.py,但我猜我需要可以在這裏做出改變,或者詞表引用是:

package_data={'wordlists': ['*.txt', './wordlists/*.txt']}, 

這是怎麼了我引用默認單詞列表文件:https://github.com/codingo/VHostScan/

+0

你不必'setup.py'在Github上。請加。 – phd

+0

@phd它不是在主atm,但它是在等待pr的分支 – Codingo

回答

1

問題你setup.py和你爸:

DEFAULT_WORDLIST_FILE = os.path.join(
    os.path.dirname(os.path.abspath(__file__)), 
    'wordlists', 
    'virtual-host-scanning.txt' 
) 

並全面代碼庫如果需要的話可以在這裏找到, ckage:

  1. 您在頂部有一個模塊VHostScan.py,但未在setup.py上市;因爲它沒有安裝,也沒有包含在二進制發行版中。

修復:添加py_modules=['VHostScan.py']

  • 目錄wordlists不是Python包因此find_packages沒有找到它並且不包括因而package_data文件。
  • 我看到2種方法來解決這個問題:

    a)使目錄wordlists Python包(添加一個空__init__.py);

    b)運用package_datalib包:

    package_data={'lib': ['../wordlists/*.txt']}, 
    
    相關問題